天天看點

補充三:操縱示例

C#示例

示例一:多表内聯

需求:根據記錄的id查詢給記錄的曆史記錄中的更改人(使用者名稱)是否擁有管理者角色

分步查詢
// 根據唯一線索id擷取所有記錄中的使用者名稱
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" >
    <entity name="jk_assignment_log" >
		<attribute name="jk_assignment_object" />
        <filter type="and" >
            <condition attribute="statecode" operator="eq" value="0" />
            <condition attribute="jk_lead" operator="eq" value="618620BD-EF28-417E-982C-8057201B6D48" />
        </filter>
    </entity>
</fetch>

// 根據使用者名稱擷取使用者名稱和id
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" >
    <entity name="systemuser" >
        <attribute name="systemuserid" />
		<attribute name="fullname" />
		<filter type="and" >
            <condition attribute="fullname" operator="eq" value="優文途新管理者" />
        </filter>
    </entity>
</fetch>


// 查詢此使用者id是否存在執行角色名稱
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" >
    <entity name="role" >
        <attribute name="name" />
        <attribute name="businessunitid" />
        <attribute name="roleid" />
        <filter type="and" >
            <condition attribute="name" operator="eq" value="系統管理者" />
        </filter>
        <link-entity name="systemuserroles" from="roleid" to="roleid" visible="false" intersect="true" >
            <link-entity name="systemuser" from="systemuserid" to="systemuserid" alias="ad" >
                <attribute name="systemuserid" />
                <filter type="and" >
                    <condition attribute="systemuserid" operator="eq" value="65AD644C-64F7-E811-A81E-9A16184AF7BF" />
                </filter>
            </link-entity>
        </link-entity>
    </entity>
</fetch>
           
聯表查詢
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" >
    <entity name="jk_assignment_log" >
		<attribute name="jk_assignment_object" />
        <filter type="and" >
            <condition attribute="statecode" operator="eq" value="0" />
            <condition attribute="jk_lead" operator="eq" value="618620BD-EF28-417E-982C-8057201B6D48" />
        </filter>
		<link-entity name="systemuser" from="fullname" to="jk_assignment_object">
			<attribute name="systemuserid" />
			<attribute name="fullname" />
			<link-entity name="systemuserroles" from="systemuserid" to="systemuserid">
				<link-entity name="role" from="roleid" to="roleid">
					<filter type="and" >
						<condition attribute="name" operator="eq" value="系統管理者" />
					</filter>
				</link-entity>
			</link-entity>
		</link-entity>
    </entity>
</fetch>
           

示例二:事務操作

Dynamics CRM 2015 UR1

新增了

ExecuteTransactionRequest

,主要用來處理事務操作,即一組操作;

例一
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;

public static void ExecuteTransactionAction(OrganizationServiceProxy server)
{
    #region 增加操作
    CreateRequest add_req = new CreateRequest();
    Entity add_entity = new Entity("mcs_tc_order");
    add_entity["mcs_state"] = new OptionSetValue(1);
    add_entity["mcs_approvalstatus"] = new OptionSetValue(1);
    add_req.Target = add_entity;
    #endregion

    #region 修改操作
    UpdateRequest up_req = new UpdateRequest();
    ColumnSet attributes = new ColumnSet(new string[] { "mcs_state", "ownerid" });
    Entity up_entity = server.Retrieve("mcs_tc_order", new Guid("xxx"), attributes);
    up_entity.Attributes["mcs_state"] = new OptionSetValue(2);
    up_req.Target = up_entity;
    #endregion

    #region 删除操作
    DeleteRequest del_req = new DeleteRequest();
    Guid id = new Guid("xxx");
    del_req.Target = new EntityReference("mcs_tc_order",id);
    #endregion

    ExecuteTransactionRequest req = new ExecuteTransactionRequest();
    req.Requests = new OrganizationRequestCollection() { add_req,up_req, del_req };
    server.Execute(req);
}
           
例二
// 1.建立事務對象
var TranRequest = new ExecuteTransactionRequest()
{
    ReturnResponses = true, // 可選
    Requests = new OrganizationRequestCollection(),
};

// 2.1 更新操作,temp為更新的記錄且已存在的記錄
TranRequest.Requests.Add(new UpdateRequest() { Target = temp });

// 2.2 删除操作,temp為ToEntityReference類型且已存在的記錄
TranRequest.Requests.Add(new DeleteRequest() { Target = temp.ToEntityReference() });

// 2.3 建立操作,temp為新記錄
TranRequest.Requests.Add(new CreateRequest() { Target = temp });

// 3. 執行事務
if (TranRequest.Requests.Count() > 0) service.Execute(TranRequest);
           

JavaScript示例

示例一:禁用表單字段

function disableForm()
{
    var controls = Xrm.Page.ui.controls.get();
    for (var i in controls) {
        var control = controls[i];
        if (control.getControlType() != "iframe" 
            && control.getControlType() != "webresource"
            && control.getControlType() != "subgrid" 
            && control.getDisabled() == false) 
        {
            control.setDisabled(true);
        }
    }
}
           

示例二:窗體儲存事件

該代碼需要配置

OnSave

事件,并啟用“将執行上下文作為第一個參數”

示例場景:通過判斷是否字段未儲存來防止觸發

function SaveAlert(ExecutionObj) {
    var project_stage = Xrm.Page.getAttribute("new_productproject_stage").getValue();
    if (project_stage >= 7) {
        if (Xrm.Page.getAttribute("new_internalresourcesid").getIsDirty()) {
            if (confirm("生産公司簡稱變更将會郵件通知總經理,請點選确認/取消變更。")) {
            }
            else {
                ExecutionObj.getEventArgs().preventDefault();//阻止儲存操作
            }
        }    
    }
}
           

繼續閱讀