小编SDL*_*per的帖子

获取出版物的所有元数据模式

我对Tridion核心服务很陌生,所以这可能是一个简单的问题.我希望通过传递发布ID来获取所有元数据模式.如果有人做过这个,请回复.

提前致谢

tridion tridion-2011

6
推荐指数
2
解决办法
687
查看次数

Tridion核心服务如何下载多媒体组件的二进制文件

我有一个要求,我需要下载多媒体组件的二进制文件,但当我访问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)

请建议.

core-services tridion tridion-2011

6
推荐指数
1
解决办法
1196
查看次数

如何获取KeywordFieldDefinitionData类型字段的类别的TCM URI?

我想获取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)

即使上面没有工作,你们中的任何人都请分析这个并回复.

提前致谢!

tridion tridion-core-services

6
推荐指数
1
解决办法
777
查看次数

如何修复此页面的状态信息无效,可能已损坏

我正在开发一个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)

asp.net viewstate

5
推荐指数
1
解决办法
2万
查看次数

Tridion核心服务:如何检查多行字段是否启用了富文本格式?

如果在多行字段上启用了富文本格式,我想检查核心服务.

如果我在富文本格式启用后分析模式的源,那么为此目的插入了许多标记: -

  <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(., &apos; &apos;, &apos;&apos;)) != &apos;&apos; 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 tridion-2011

4
推荐指数
1
解决办法
375
查看次数

无法从任何其他计算机上找到使用核心服务创建的项目,除非安装了Tridion CMS

我无法找到任何其他机器使用核心服务创建的任何项目(架构/组件),除非安装了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)

tridion tridion-2011

3
推荐指数
1
解决办法
488
查看次数

如何通过文件扩展名获取多媒体类型的TCM URI

我想通过将文件扩展名作为参数传递给方法来获取多媒体类型的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)

tridion tridion-2011

3
推荐指数
1
解决办法
256
查看次数

Tridion核心服务:如何将特定版本的TCM URI分配给多媒体链接字段

在为组件的多媒体链接字段分配值时,我想分配特定版本的图像的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.因为我正在为客户端做一个自动化过程,这可能是一个特殊的要求,但我的客户想要查看每个版本的组件,哪个版本的图像被分配(多媒体组件的文件扩展可能存在差异)和不是最近的一个.这可能吗?

core-services tridion tridion-2011

3
推荐指数
1
解决办法
367
查看次数

获取元数据模式的元数据字段类型

我想获取所有字段以及元数据模式的元数据字段的类型/数据类型.

我已经写了下面的示例代码来实现功能,我可以获取名称,描述等但找不到任何类型/ 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)

tridion tridion-2011

1
推荐指数
1
解决办法
373
查看次数

如何使用核心服务检查字段是否允许多个值

使用核心服务我们如何检查字段是否允许多个值,下面是我用来获取字段类型的代码: -

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)

}

请建议.

tridion tridion-2011

1
推荐指数
1
解决办法
184
查看次数

如何为日期或数字类型的元数据字段赋值?

我使用以下链接的代码来处理元数据字段: -

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数据类型建议解决方案.提前致谢

core-services tridion tridion-2011

1
推荐指数
2
解决办法
865
查看次数