【问题标题】:CRM 2011 - Javascript Button - Change field on all Entitie RecordsCRM 2011 - Javascript 按钮 - 更改所有实体记录上的字段
【发布时间】:2013-03-20 12:28:19
【问题描述】:

我对 javascript 几乎没有经验,我正在尝试选择多个实体并将字段从 true 更改为 false,反之亦然。 我试图在 SDK 上查看 JS 的示例,但没有找到我能理解的内容,有人可以帮我举个例子吗?

更新: 我想我无法解释。因此,当我在视图中时,我需要一个按钮来更改所有记录中的特定字段,而无需选择记录,我可以使用 Ribbon Workbench 通过工作流来完成。

到目前为止,我可以通过 XRM 更改值,但前提是我打开了该记录的表单。

  function test() 
{
var id = Xrm.Page.data.entity.getId();
field = Xrm.Page.getAttribute("new_onoff").getValue();
Xrm.Page.getAttribute("new_onoff").setValue("offviaJava");
alert(id + field);
}

目标是对 VIEW 中的每条记录执行相同的操作

【问题讨论】:

  • 您好,您想更改一个实体中的记录值还是不同实体的记录值?
  • 同一个实体,不同的记录
  • 用另一个选项查看我的更新。

标签: javascript button dynamics-crm-2011 workbench


【解决方案1】:

要更改同一实体或多个实体的多条记录,最好的方法是使用工作流或插件。但我对 Workflow 的投票很容易做出这种类型的更改。查看here 的示例。

编辑:根据您的更新,我建议另一种选择:

<Actions>
  <JavaScriptFunction Library="$webresource:AccountFormLibrar" FunctionName="CreateNewAccount">
  <CrmParameter Value="SelectedControlSelectedItemIds"/></JavaScriptFunction>
</Actions>
function CreateNewAccount (SelectedRecordGUID) {
 //the parameter will receive all GUIDS in comma separated
}

您必须添加功能区按钮并添加操作。

【讨论】:

  • Thnaks Pedro,好的,现在我可以拥有所有的 guid,但是如何仅使用 javascript 来更新记录,而不使用 xml、soap 等?
  • 您好,请参阅article,它展示了如何使用 Soap 更新记录。
【解决方案2】:

在 Dynamics CRM 中有两种查看数据的方式,网格视图(您可以同时查看多个实例)和实体表单视图(您可以在当前打开的窗口或选项卡中查看一个实例的数据)。使用 javascript 更改表单视图上的数据、外观和其他操作很容易,但听起来您正在查看网格视图,因为您提到了多项选择。

我认为您不应该使用 javascript,而是查看对话框和工作流程。工作流是在后台运行的异步操作,无需任何用户输入。它可以做很多开箱即用的事情,您也可以添加自定义 .NET 代码来更改行为。对话框类似,但收集用户信息作为其操作的输入(如果用户需要做出选择或输入随时间变化的内容,则很有用)。

您可以通过选择一行或多行并单击工作流按钮来手动运行工作流。对话的类似过程。

更多信息:Processes, Workflows, and Dialogs for Microsoft Dynamics CRM

【讨论】:

  • 嗨 Henrik,我可以使用工作流的资源来做到这一点,我想要做的是通过 GRID 中的 javascript,不需要从该实体中选择任何记录并按下按钮,它就会改变特定字段的内容
【解决方案3】:

好的,我按如下方式解决了我的问题,因为我无法使用 SelectedControlSelectedAllItemIds 将自己限制在页面在视图中提供的 50 条记录中,因为 xml 总共只获取 50 个 guid。 所以现在按钮调用了 ASP 页面的 JAVASCRIPT URL,这是 c# 中的代码:

 EntityCollection retrieved = GetInformacaoDB(new_teste.EntityLogicalName.ToString());

                    DataSet ds1 = new DataSet();

                    DataTable dt = new DataTable("List");
                    dt.Clear();
                    dt.Columns.Add(new DataColumn("Description", typeof(string)));

                    foreach (var c in retrieved.Entities)
                    {    
                            GridView1.Visible = false;                             
                            DataRow dr = dt.NewRow();
                            dr["Description"] = c.Attributes["new_testid"];

                             object _test = c.Attributes["new_testid"];

                               string testGuid = _test.ToString();

                                Guid _testId = new Guid(testGuid);

                                Entity EntityName = new EntityName("new_test");

                                ColumnSet attributes = new ColumnSet(new string[] { "new_testid" });

                                EntityName = _orgService.Retrieve(EntityName.LogicalName, _testId, attributes);

                                entidade["new_onoff"] = "OffViaWebService";

                                _orgService.Update(EntityName); 

                            dt.Rows.Add(dr);

                    }
                    ds1.Tables.Add(dt);
                    GridView1.DataSource = ds1;
                    GridView1.DataBind();
                    Cache["Data"] = ds1;

【讨论】:

    猜你喜欢
    • 2013-05-22
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-03-01
    • 2011-12-14
    相关资源
    最近更新 更多