我对Tridion核心服务很陌生,所以这可能是一个简单的问题.我希望通过传递发布ID来获取所有元数据模式.如果有人做过这个,请回复.
提前致谢
我有一个要求,我需要下载多媒体组件的二进制文件,但当我访问BinaryContentData类暴露的属性时,没有属性下载图像文件.虽然对于上传文件,Core Service也有一个属性UploadFromFile.
那么有没有办法将二进制文件下载到临时位置.以下是我使用的代码:
core_service.ServiceReference1.SessionAwareCoreService2010Client client = new SessionAwareCoreService2010Client();
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword"; client.Open();
ComponentData component = (ComponentData)client.TryCheckOut(
multimediaComponentURI, new ReadOptions());
BinaryContentData binaryData = component.BinaryContent;
Run Code Online (Sandbox Code Playgroud)
请建议.
我想获取KeywordFieldDefinitionData类型字段的类别的TCM URI.
我使用下面链接的代码来读取组件的元数据字段: -
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
我可以在Reference.cs类中看到Category和CategoryFields属性(在给出对核心服务的refence时自动生成)但是在Field类(在上面的code.google链接中定义)中没有定义属性来访问Category和CategoryFields属性.我尝试按以下方式定义属性: -
public System.Reflection.PropertyInfo Category
{
get { return definition.GetType().GetProperty("Category", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic); }
}
Run Code Online (Sandbox Code Playgroud)
即使上面没有工作,你们中的任何人都请分析这个并回复.
提前致谢!
我正在开发一个Asp.net项目,我通过页面对象上的LoadControl()动态地在页面上创建了一些用户控件,但是当我尝试通过任何页面进行任何回发"The state information is invalid for this page and might be corrupted."时,即使我设置了动态创建的控件的Viewstate为假.
如果您遇到此问题,请告诉我您是如何修复它的.
堆栈跟踪是: -
[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]
System.Convert.FromBase64String(String s) +0
System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +77
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37
System.Web.UI.HiddenFieldPageStatePersister.Load() +147
[ViewStateException: Invalid viewstate.
[HttpException (0x80004005): The state information is invalid for this page and might be …Run Code Online (Sandbox Code Playgroud) 如果在多行字段上启用了富文本格式,我想检查核心服务.
如果我在富文本格式启用后分析模式的源,那么为此目的插入了许多标记: -
<tcm:Size xmlns:tcm="http://www.tridion.com/ContentManager/5.0">2</tcm:Size>
<tcm:FilterXSLT xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" cdata-section-elements="script"></xsl:output>
<xsl:template name="FormattingFeatures">
<FormattingFeatures xmlns="http://www.tridion.com/ContentManager/5.2/FormatArea">
<Doctype>Transitional</Doctype>
<AccessibilityLevel>0</AccessibilityLevel>
<DisallowedActions></DisallowedActions>
<DisallowedStyles></DisallowedStyles>
</FormattingFeatures>
</xsl:template>
<xsl:template match="/ | node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"></xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="/body[not(processing-instruction() or comment() or normalize-space(translate(., ' ', '')) != '' or *[@* or * or comment() or processing-instruction() or not(self::p or self::br)])]">
<!-- make an empty <body> if all the body has is empty paragraphs, line-breaks and (non-breaking) spaces -->
<xsl:copy></xsl:copy>
</xsl:template> …Run Code Online (Sandbox Code Playgroud) 我无法找到任何其他机器使用核心服务创建的任何项目(架构/组件),除非安装了Tridion CMS,但是当我在使用相同控制台应用程序安装Tridion CMS的机器上创建任何项目时,我能够使用TCM URI找到该特定项目.是否需要在配置文件中定义任何配置(我认为此问题与刷新或清除浏览器缓存无关)以及从其他计算机生成TCM URI时,即使从CMS服务器所在的位置也无法搜索该项目安装.请建议......
更多信息:-
我正在开发SDL Tridion 2011 GA,下面是创建我正在使用的组件的示例代码: -
public static string CreateComponentStack(string folderUri, string title,
string schemaID)
{
core_service.ServiceReference1.SessionAwareCoreService2010Client client =
new SessionAwareCoreService2010Client();
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
client.Open();
ReadOptions readoptions = new ReadOptions();
string TargetFolderTcmId = folderUri;
string LinkSchemaTcmId = schemaID;
ComponentData CurrentMigrationComponent = client.GetDefaultData(
ItemType.Component, TargetFolderTcmId) as ComponentData;
LinkToSchemaData SchemaToUse = new LinkToSchemaData();
SchemaToUse.IdRef = LinkSchemaTcmId.ToString();
CurrentMigrationComponent.Schema = SchemaToUse;
CurrentMigrationComponent.Title = title;
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Content xmlns='uuid:7289aba9-16de-487c-9142-f6f97dbd2571'>"+
"</Content>");
CurrentMigrationComponent.Content = doc.DocumentElement.OuterXml;
string …Run Code Online (Sandbox Code Playgroud) 我想通过将文件扩展名作为参数传递给方法来获取多媒体类型的TCM URI.下面是我正在使用的代码,但我得到一些例外: -
private static string GetMultimediaTypeTCMURI(FileExtensionsList lFileExtensions)
{
string lTCMURI = "";
try
{
SessionAwareCoreService2010Client client
= new SessionAwareCoreService2010Client();
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
client.Open();
FileExtensionsList list = new FileExtensionsList();
var mmType = client.GetSystemWideList(new MultimediaTypesFilterData())
.Single(mt => ((MultimediaTypeData)mt).FileExtensions == lFileExtensions);
lTCMURI = mmType.Id;
}
catch (Exception e)
{
throw new Exception("Please check either Mimetype"
+ lFileExtensions + "is wrong or Mimetype does not exist in SDL Tridion.");
}
return lTCMURI;
}
Run Code Online (Sandbox Code Playgroud)
致电上述方法: -
FileExtensionsList list = new FileExtensionsList(); …Run Code Online (Sandbox Code Playgroud) 在为组件的多媒体链接字段分配值时,我想分配特定版本的图像的TCM URI.Tridion内部维护带有后缀"-v"的版本和相应的版本号ex: - 对于多媒体组件的第二版我的TCm URI将是tcm:pubNum-multiMediaCompoUniqueID-v2甚至我可以用这个"-v2"打开多媒体组件后缀URI通过搜索功能.现在让我说我创建了5个版本的多媒体图像和大约5个版本的组件,对于每个版本的组件我试图将"-v"后缀URI分配给组件的多媒体链接字段然后我得到了以下错误: -
"在URI中找到了预期的版本:tcm:pubNum-compoUniqueID."
和我的组件的xml如下: -
<imageField xmlns="uuid:e65ab5b8-babe-4146-a8e4-9b6fda694ea1" xlink:type="simple" xlink:href="tcm:pubNum-multiMediaCompoUniqueID-v1" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="HTML.zip"></imageField>
Run Code Online (Sandbox Code Playgroud)
如果我尝试手动分配这个错误,我也会得到同样的错误,我也试图逃避双引号并且在拍摄时遇到了一些麻烦.
所以我的简单定义是,如果Tridion维护多媒体组件的所有版本,那么为什么它不允许我们分配该多媒体组件的先前/特定版本TCm URI.因为我正在为客户端做一个自动化过程,这可能是一个特殊的要求,但我的客户想要查看每个版本的组件,哪个版本的图像被分配(多媒体组件的文件扩展可能存在差异)和不是最近的一个.这可能吗?
我想获取所有字段以及元数据模式的元数据字段的类型/数据类型.
我已经写了下面的示例代码来实现功能,我可以获取名称,描述等但找不到任何类型/ dataType的属性.如果您有任何想法,请建议......
var client = new SessionAwareCoreService2010Client();
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
client.Open();
if (client.State == System.ServiceModel.CommunicationState.Opened)
{
var schemaUri = "tcm:1-47-8";
var fields= client.ReadSchemaFields(schemaUri, true, new ReadOptions());
var fieldName = fields.MetadataFields[0].Name;
}
Run Code Online (Sandbox Code Playgroud) 使用核心服务我们如何检查字段是否允许多个值,下面是我用来获取字段类型的代码: -
SchemaFieldsData fields = client.ReadSchemaFields(schemaTCMURI, true, new ReadOptions());
foreach (var field in fields.MetadataFields)
{
if (field is SingleLineTextFieldDefinitionData)
{
// some code
}
else if (field is MultiLineTextFieldDefinitionData)
{
// this will check only if field is multiline not multi valued }
Run Code Online (Sandbox Code Playgroud)
}
请建议.
我使用以下链接的代码来处理元数据字段: -
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
但是当我尝试为日期类型的元数据字段赋值时,我得到以下xml验证错误: -
"System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误.原因:'uuid:myUUID:dateField'元素无效 - 值'10/4/2012 03:04:00 AM'是根据其数据类型'http://www.w3.org/2001/XMLSchema:dateTime'无效 - 字符串'10/4/2012 03:04:00 AM'不是有效的DateTime值..(故障详细信息是等于myPorject.serviceReference.CoreServiceFault)"
无论我将值分配为字符串还是DateTime数据类型我都得到相同的错误,我还尝试使用Datetime数据类型重载AddValue方法,但到目前为止还没有任何工作.
AddValue方法的代码片段: -
public void AddValue(string value1)
{
string value = string.IsNullOrEmpty(value1) ? null : value1; ;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value;
}
Run Code Online (Sandbox Code Playgroud)
请为Date和Number数据类型建议解决方案.提前致谢