Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript crm2011插件调用js函数_Javascript_Plugins_Call_Dynamics Crm 2011 - Fatal编程技术网

Javascript crm2011插件调用js函数

Javascript crm2011插件调用js函数,javascript,plugins,call,dynamics-crm-2011,Javascript,Plugins,Call,Dynamics Crm 2011,如何使用CRM2011中的插件从适当的web资源运行JavaScript函数 我在网上找不到任何信息。大多数参考资料描述了如何从JS触发插件,但不是相反 下面是taht将注释复制到描述字段的JS代码。 单击“保存”时。您可以看到数据正确显示在描述字段中。但是,如果按save并再次关闭和打开表单,说明字段将为空。 我认为这是因为JS是在安全事件之后执行的,但后来的测试发现它是错误的。有人能指出这个JS代码中的一个错误导致数据无法保存吗? 或者建议我们如何编写一个插件,从相关实体检索数据并将其写入表

如何使用CRM2011中的插件从适当的web资源运行JavaScript函数

我在网上找不到任何信息。大多数参考资料描述了如何从JS触发插件,但不是相反

下面是taht将注释复制到描述字段的JS代码。 单击“保存”时。您可以看到数据正确显示在描述字段中。但是,如果按save并再次关闭和打开表单,说明字段将为空。 我认为这是因为JS是在安全事件之后执行的,但后来的测试发现它是错误的。有人能指出这个JS代码中的一个错误导致数据无法保存吗? 或者建议我们如何编写一个插件,从相关实体检索数据并将其写入表单中的字段。塔克斯

function copyNotes()
 {
// CLEAR DESCRIPTION FIELD
alert("JS");
    Xrm.Page.getAttribute("description").setValue('');
// GET ID OF THE CASE AND CLEAN IT AND GET URL for oData stuff
//THEN CALL RETRIEVE FUNCTION
    var caseID = Xrm.Page.data.entity.getId();
    caseID = caseID.replace('{', '').replace('}', '');
    var oDataPath = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/organizationdata.svc";
    ODataPath = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc";
    retrieveRecord(caseID);
}
// CREATE AN HTTP REQUEST AND SEND IT
function retrieveRecord(Id) {

var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", ODataPath + "/AnnotationSet?$filter=ObjectId/Id" + " eq (guid'" + Id + "')", true);

retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.onreadystatechange = function() {
// THIS HANDLES A CALLBACK 
        retrieveReqCallBack(this);
    };
    retrieveReq.send();
}

function retrieveReqCallBack(retrieveReq) {
    if (retrieveReq.readyState == 4 /* complete */  )
 {
        if (retrieveReq.status == 200) {
            //Success
            var retrieved = this.parent.JSON.parse(retrieveReq.responseText).d;
// ITERATE THROUGH THE NOTES FOR THIS CASE
            for (var i = 0; i < retrieved.results.length; i++) {
// IF IS AN EMPTY FIELD ADD 'case details:'
                if (Xrm.Page.getAttribute("description").getValue() == null || Xrm.Page.getAttribute("description").getValue() == 'null') {
                    Xrm.Page.getAttribute("description").setValue('Case details:');
                }
                // BOF PARSE DATE
                var date = retrieved.results[i].CreatedOn;
                date = new Date(parseInt(date.replace("/Date(", "").replace(")/", ""), 10));
                // EOF PARSE DATE
                var newtext = "--------------------\r\n" + "Created by: " + retrieved.results[i].CreatedBy.Name + " - " + date + "\r\n" + retrieved.results[i].NoteText + "\r\n--------------------\r\n";
                var text = Xrm.Page.getAttribute("description").getValue() + "\r\n" + newtext;
                Xrm.Page.getAttribute("description").setValue(text);
            }
        }
    }

}

函数copyNotes()
{
//清除描述字段
警报(“JS”);
Xrm.Page.getAttribute(“说明”).setValue(“”);
//获取案例的ID并清理它,然后获取oData内容的URL
//然后调用检索函数
var caseID=Xrm.Page.data.entity.getId();
caseID=caseID.replace('{','').replace('}','');
var oDataPath=Xrm.Page.context.getServerUrl()+“/xrmservices/2011/organizationdata.svc”;
ODataPath=Xrm.Page.context.getServerUrl()+“/XRMServices/2011/OrganizationData.svc”;
检索记录(caseID);
}
//创建一个HTTP请求并发送它
函数检索记录(Id){
var retrieveReq=新的XMLHttpRequest();
retrieveReq.open(“GET”,ODataPath+”/AnnotationSet?$filter=ObjectId/Id“+”eq(guid“+Id+”),true);
retrieveReq.setRequestHeader(“接受”、“应用程序/json”);
retrieveReq.setRequestHeader(“内容类型”,“应用程序/json;字符集=utf-8”);
retrieveReq.onreadystatechange=函数(){
//这将处理回调
检索器eqcallback(此);
};
retrieveReq.send();
}
函数retrieveReqCallBack(retrieveReq){
如果(retrieveReq.readyState==4/*完成*/)
{
如果(retrieveReq.status==200){
//成功
检索的var=this.parent.JSON.parse(retrieveReq.responseText).d;
//反复阅读本案例的注释
对于(var i=0;i
插件中不支持从服务器回调客户端的方法。我也不知道任何不受支持的方式

我认为这个问题根本没有意义。插件的唯一触发器是当存在某种CRUD操作时。GUI触发的任何CRUD操作都将以任何方式刷新实体。您可以通过javascript和Odata调用执行更新,但是一旦插件完成,您就可以运行任何您想要运行的javascript。

没有(合理的)方法来实现这一点

原因是插件是一个服务器大小执行的东西。它甚至不能假设有一个GUI。(当然,我们知道有,但一般来说,服务器大小的代码不能直接与GUI交互)

JavaScript是客户端代码,客户端假定为服务器。这就是为什么JS可以调用插件(虽然我不会这么说),但不能反过来调用


我从来没有需要这样的手术,所以我很好奇你的任务是什么。你要求的是纯粹的学术兴趣,还是设计的一部分?也许有更好的方法来实现您的目标?

插件需要从服务器更新客户端上的javascript,您想实现什么?插件需要从js web资源运行一个函数。问题是我需要在onSave事件之前运行这个函数,我不知道如何运行,我认为这是不可能的。我唯一能想到的就是写一个插件来运行JS脚本。否则我觉得我必须在插件中复制js函数的行为。为什么你的javascript不能在表单的OnSave事件中运行?它可以。但在我看来,它甚至会在保存后开火。首先,表单保存并运行JS。我需要在表单保存之前执行它。运行onLoad对我来说也不方便。实际上,我需要在与它相关并嵌入表单中的另一个实体发生更改时运行它,但该实体是一个系统实体,我无法在该实体中特定字段发生更改时修改它或分配JS OnSave Javascript事件在实际数据库更新/插件执行之前运行。Ok。谢谢这就是我找不到任何东西的原因我有一张表格。在这个表单上,我有一个用户可以添加注释的部分。我有一个已经写过的JS。这个JS的一个功能是将一些参数从notes复制到表单上的另一个字段。我不想碰这个JS,作为C#和插件的绝对新手,我认为写一个触发JS的插件比写一个访问实体的插件更容易,复制数据并将其插入到不同的地方。这就是为什么我问这个解决方案。然而,现在我看到我必须在一个很短的时间内做每件事plugin@AlexeyOmelchenko我真的很理解你的想法。哟