小编Nun*_*res的帖子

在组件编辑器中获取字段的_current_值?(Tridion 2011 SP1)

我正在编写"Save"命令的扩展,基本上我想验证某些字段并提供一个弹出窗口,允许编辑器根据当前日期,Release#和其他一些属性选择给定的关键字或其他值.

我以为我做得很好,直到我终于弄清楚$display.getItem()是返回存储在CM中的项目,而不是编辑器可能已更改的当前值.

有没有内置的方法来获取这些信息?或者我需要解析DOM来解决它?

这是我目前的代码

var item = $display.getItem();
if (item.getItemType() == "tcm:16") {
   if (item.getSchema().getStaticTitle() == "Test Schema") {
      var content = $xml.getNewXmlDocument(item.getContent());
      var fieldXml = $xml.getInnerText(content, "//*[local-name()='NewField']");
      alert(fieldXml);
   }
}
Run Code Online (Sandbox Code Playgroud)

它的工作-我得到"新野"的价值-但这是项的值,当它被加载,而不是当前值.

有趣的是,item.getTitle()显示了Title字段的当前值,所以我希望有一种方法可以实现自定义字段.

tridion

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

在SDL Trdidion 2009中扩展到页面图标状态

我们正在使用SDL Tridion 2009 SP1.我们已经实现了一项新功能,即CMS中的扩展程序,它允许我们锁定页面.如果页面被锁定,则无法再发布(锁定页面的信息保存在为此扩展创建的数据库中).

我们想要添加一个新图标,该图标将通知用户页面的新状态.

现在有4个图标组合(没有动作,检查,发布,检查和发布)

由于我没有CMS接口的长期经验,我想找到一些帮助,找到一个对性能没有影响的解决方案,并且在不进行大量修改方面很容易实现.

以下是我对此的调查:

我注意到cms中图标的渲染方式并不是一个易于更新的简单机制.每次我们点击CMS左侧的项目时,为了从右侧呈现列表,对WebGUIResponder.aspx进行ajax调用(带有xml请求).页.

我们将得到的响应是一个包含属性字段Icon的xml

<tcm:ListItems xmlns:tcm="http://www.tridion.com/ContentManager/5.0" 
    ID="tcm:yyy-zzzz-4" Managed="68" ItemType="4">
    <tcm:Item ID="tcm:yyy-zzzzz-64" Type="64" Title="NotificationTest" 
        Modified="2011-05-09T09:42:27" FromPub="400 YYYY Website Master (EN-GB)" 
        IsNew="false" Icon="T64L0P1"/>
</tcm:ListItems>
Run Code Online (Sandbox Code Playgroud)

基于此字段图标属性(Icon ="T64L0P1),图像名称开始被处理.

  • T64 =表示它是一个页面
  • 未检查L0 =
  • P1 =它已经发布了

对于这样的字段,图像名称结果将是= T64.16x16.List.Published.gif

我找不到通过页面xml更新此字段的方法,不是保存在xml中的信息,而是在xml请求时在dll中构建.(某处基于已发布的其他字段以及其他此类图标字段的计算.)

因此,如果无法修改此字段,我们可能选择的选项是:为了在CMS中集成我们的更改而不修改其.dll(这与SDL Trdion的新版本的兼容性不好修改dlll)并且没有改变太多我正在考虑这种方法的逻辑.

我们可以对新页面WebGUICheckPageLocked.aspx进行新的Ajax调用(需要测试对性能有什么影响).在此页面后面的代码中,我们可以确定页面是否被锁定(使用我们的内部函数来确定页面是否已锁定,此功能是否已经完成).在页面中,我们将图标字段更改为T64L0P1E01(添加一些额外信息,以便我们确定页面的新状态).我们还将修改在GetPNGIconName javascript函数中,我们可以考虑新信息E01进行额外检查...)

如果有人对此有更好的想法,也许这是可以轻松完成的事情,也许这是我们可以更新Icon字段的方式.

亲切的问候,克里斯蒂娜

tridion

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

确保我的扩展列表始终显示"当前"数据?

当您为CME列表创建数据扩展器时 - 例如,为此示例添加Schema的列- 只要您执行强制List重新加载的操作,它就可以正常工作.

但是,某些操作不会强制列表重新加载(例如编辑文件夹中的组件,然后保存和关闭),看起来Anguilla正在加载使用不同机制加载的项目的数据,该机制仅加载数据有问题的项目(这是有道理的).

如果我希望我的扩展列表视图行为正常,并且每当给定项目更改时(而不是仅在重新加载列表视图时)还加载我的附加属性,我还需要做什么?

tridion

8
推荐指数
2
解决办法
666
查看次数

如何使用CoreService在自定义类上实现WCF事务支持?

我写了一个类来帮助使用核心服务向目标添加和删除目标.目标通常通过核心服务公开为一个字符串(带有XML内容),所以我写了我自己的包装器,等等.

我现在有一种情况需要更新2个发布目标,并认为使用事务范围确保两个目标同时更新会很酷.

然而,我正在努力实现这一点.

代码工作(使用标准CoreService WCF客户端):

TransactionOptions txOptions = new TransactionOptions 
                    { IsolationLevel = IsolationLevel.ReadCommitted };
using(TransactionScope scope = new TransactionScope(
                            TransactionScopeOption.Required, txOptions))
{
    PublicationTargetData publicationTarget1 = (PublicationTargetData)client.Read("tcm:0-1-65537", readOptions);
    PublicationTargetData publicationTarget2 = (PublicationTargetData)client.Read("tcm:0-2-65537", readOptions);

    publicationTarget1.TargetLanguage = "JSP";
    publicationTarget2.TargetLanguage = "JSP";
    client.Save(publicationTarget1, readOptions);
    client.Save(publicationTarget2, readOptions);

    // Stop saving
    scope.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

执行此代码将成功回滚我所做的更改(如果我之前中断scope.Dispose()并检查Tridion中的发布目标,它成功更改目标,然后"撤消"更改).

如果我现在也尝试在交易中使用我的"扩展出版物目标"类,我无法处理它.

TransactionOptions options = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
    ExtendedPublicationTarget target1 = new ExtendedPublicationTarget("tcm:0-1-65537");
    ExtendedPublicationTarget target2 = new ExtendedPublicationTarget("tcm:0-2-65537"); …
Run Code Online (Sandbox Code Playgroud)

wcf transactionscope tridion

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

Tridion CoreService创建缺少元数据的组件

我得到异常= {"无法找到uuid:5708986b-390f-4728-b0c7-b49bd3d8f407:元数据."}

schemaId = UpdatePubId(schemaId, containerId);
SchemaData schemaData = (SchemaData)client.Read(schemaId, null);
string xml = string.Format("<{0} xmlns=\"{1}\">{2}</{0}>", schemaData.RootElementName, schemaData.NamespaceUri, fields);

ComponentData componentData = new ComponentData
{
    Content = xml,
    ComponentType = ComponentType.Normal,
    Title = title,
    Schema = new LinkToSchemaData { IdRef = schemaId },
    LocationInfo = new LocationInfo { OrganizationalItem = new LinkToOrganizationalItemData { IdRef = containerId } },
    Id = "tcm:0-0-0", 
    MetadataSchema = schemaData.MetadataSchema,
    Metadata = schemaData.Metadata
};

try
{
    componentData = client.Save(componentData, new ReadOptions()) as ComponentData;
    componentData = client.CheckIn(componentData.Id, …
Run Code Online (Sandbox Code Playgroud)

metadata tridion

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

事件系统:如何知道编辑器是否单击"保存"或"保存并关闭"?

在Tridion 2011 SP1中,我试图实现一个事件,只要编辑器按下Save&Close(但不保存),它就会自动发布项目.

在正常情况下,这可以在CheckIn事件中处理,但由于此项可能在工作流中,因此没有CheckIn事件.

在COM Events中,我们有一个标志(doneEditing)告诉我们编辑器是否按下了save&close vs Save.我似乎无法在TOM.NET Events中找到类似的选项.

供参考 - 这是迄今为止的代码:

[TcmExtension("Publish to Wip Events")]
public class PublishToWip : TcmExtension
{
    public PublishToWip()
    {
        EventSystem.SubscribeAsync<VersionedItem, SaveEventArgs>(PublishItemToWip, EventPhases.TransactionCommitted);
    }
    private void PublishItemToWip(VersionedItem item, SaveEventArgs args, EventPhases phases)
    {
       // Magic goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

我查看了SaveEventArgs的选项,但没有找到任何可以提供这些信息的内容.有小费吗?

tridion

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

安圭拉 - 从弹出窗口更新字段的值?

我有一个模态弹出窗口,只要编辑器尝试使用某些值保存组件(在这种情况下是过去的日期字段).

在这个弹出窗口中,我向编辑器显示了几个选项(非常类似于默认的"Open Shared Item"对话框)和一个OK/Cancel按钮组合.在取消时我触发"取消"事件,编辑器返回编辑屏幕,这里一切都很好.在"确定"上,我想更改字段的值以匹配编辑器选择的任何内容,然后保存.

我尝试使用FieldBuilder的方法和Boris在其他主题中提到的示例, 但我无法从弹出对话框中找到该字段.

关于如何从模态弹出窗口中修改项目的xml(也可能是页面)的任何建议?

编辑:getControlForFieldName中使用的代码

function getControlForFieldName(name) {
    var fieldBuilder = $display.getView().properties.controls.fieldBuilder;
    var fieldsContainer = fieldBuilder.properties.input;
    var fieldsNode = fieldsContainer.getElement();
    var fieldContainer = $dom.getFirstElementChild(fieldsNode);
    while (fieldContainer) {
        var labelNode = $dom.getFirstElementChild(fieldContainer);
        var fieldNode = $dom.getNextElementSibling(labelNode);
        var control = fieldNode.control;
        if (control.getFieldName() == name) {
            return control;
        }
        fieldContainer = $dom.getNextElementSibling(fieldContainer);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑#2

在Frank的建议之后,以及Jaime&Frank离线的一些帮助,我得到了如下工作:

  1. 从命令扩展中调用弹出窗口(在我的情况下保存并关闭)
  2. command.js指定一个在"submit"上调用的事件处理程序(== OK被按下)
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit));
Run Code Online (Sandbox Code Playgroud)

在我的弹出窗口中,我将所选项(它是关键字ID)传递给事件处理程序:

this.fireEvent("submit", { id: select.options[select.selectedIndex].value });
Run Code Online (Sandbox Code Playgroud)

现在回到事件处理程序中_onPopupSubmit(e)我刚读取e.data.id,加载此关键字,获取ID和Title等属性,并使用item.setMetadata("具有更新值的新元数据")更新项目的元数据.

简单:)

tridion

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

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

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

提前致谢

tridion tridion-2011

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

是否可以通知Tridion Core Service数据更改?

我正在为一些懒惰的程序员实现一个核心服务"Facade",这些程序员不想改变他们的编码风格(包括我),并希望实现对象缓存,这显然会导致"多长时间和多少"这个大问题我应该缓存".

理想的答案是永远缓存,除非数据发生变化.

有没有办法(通过一些WCF事件)为数据更改实现一个"监听器",可用于从缓存中删除项目?

顺便说一句,我现在正在使用.NET的本机ObjectCache(MemoryCache)和1分钟的滑动缓存策略.

谢谢,

ñ

tridion

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

图像在演示方面没有得到解决

我们的图像文件名为" Tim%20Butler%20Trading.jpg ".该图像作为主要组件的"图像"字段中的组件链接链接.在C#DLL中,我们读取此"图像"字段并形成图像标记,如下所示:

"<img " + style + " src=\"" + imageID + "\" />" 
Run Code Online (Sandbox Code Playgroud)

其中style是属性名称(如果有),imageID是多媒体组件的tcm id.

输出字符串使用图像,标题和组件中的一些其他字段值形成.此输出被推入包中以在dwt中访问它.传递给dwt的输出字符串的contentType是"HTML".

我们使用DefaultFinishActions发布图像.此图像将作为Tim%20Butler%20Trading34-13565.jpg部署在演示服务器上,但未在演示方面得到解决.

在页面源图像标签形成如下:

<img src="/images/Tim%2520Butler%2520Trading34-13565.jpg"  class="img" />
Run Code Online (Sandbox Code Playgroud)

我们认为,DWT被转换%图像文件名%25,当图像被公布.

有人能告诉我如何解决这个问题吗?

tridion tridion-2011

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

标签 统计

tridion ×10

tridion-2011 ×2

metadata ×1

transactionscope ×1

wcf ×1