none
crm 2011 neue ribbon buttons mit javascript RRS feed

  • Frage

  • Hallo,

    wir verwenden das Vertragspositionsnummer im Verkaufschance(Produkt), Angebot(Produkt) und Auftrag(Produkt) für die Sortierung. Damit das Vertragspositionsnummer leichter änderbar ist, habe ich neue Buttons im Ribbon gemacht, die dann meine Javascript Funktion für alle ausgewählte Produkte im Grid aufrufen.

    Product.updateLineItemNumber=function(gridControl,records,entityTypeName,value){
        if(entityTypeName=='opportunityproduct') entityTypeName='OpportunityProduct';
        if(entityTypeName=='quotedetail') entityTypeName='QuoteDetail';
        if(entityTypeName=='salesorderdetail') entityTypeName='SalesOrderDetail';
        if((records!=null) && (records.length>0)){
            for(var i=0;i<records.length;i++){
                if(records[i].Id!=null){
                    SDK.REST.retrieveRecord(
                        records[i].Id,
                        entityTypeName,
                        entityTypeName + "Id,LineItemNumber",
                        null,
                        function(record) {
                            if(record.LineItemNumber==null){
                                record.LineItemNumber=value; 
                            }else{
                                record.LineItemNumber+=value; 
                            }
                            var id=null;
                            if(entityTypeName=='OpportunityProduct') id = record.OpportunityProductId;
                            if(entityTypeName=='QuoteDetail') id = record.QuoteDetailId;
                            if(entityTypeName=='SalesOrderDetail') id = record.SalesOrderDetailId;
                            SDK.REST.updateRecord(
                                id,
                                record,
                                entityTypeName,
                                function(){
                                    gridControl&&gridControl.refresh();
                                },
                                Gekko.errorHandler
                            );
                        },
                        Gekko.errorHandler);
                }
            }        
        }
    }

    Hier verwende ich weitere Scripts aus SDK
    crm2011sdk\sdk\samplecode\js\restendpoint\javascriptrestdataoperations\javascriptrestdataoperations\scripts\sdk.rest.js und dieser dann weiter crm2011sdk\sdk\samplecode\js\restendpoint\javascriptrestdataoperations\javascriptrestdataoperations\scripts\json2.js

    Die zwei Scripts (sdk.rest.js und json2.js) habe ich in Formularen Verkaufschance/Angebot/Auftrag als Formularbibliotheken hinzugefügt. Im Verkaufschance funktioniert es richtig und Vertragspositionsnummer wird für ausgewählte Verkaufschance(Produkte) entsprechend angepasst. Beim Angebot/Autrag bekomme ich aber in der Zeile " SDK.REST.retrieveRecord(" eine Fehlermeldung, dass "'SDK' is undefined".

    Ich bin schon draufgekommen, dass das Problem etwas damit zu tun hat, dass die Produkte im Verkaufschance im Textkörper drin sind......beim Angebot/Auftrag ist es aber im Navigationsbereich. Bzw. wenn ich im Angebot-Formular ins Textkörper ein neues Unterraster mit Angebot(Produkt)-Grid hinzufüge, funktioniert es dort auch, aber im Navigation nach wie vor nicht.

    Hat jemand eine Idee woran das liegen kann? Danke im Voraus.

    Martin

    Freitag, 9. März 2012 09:47

Antworten

  • Hallo Daniel,

    das letzt Stand ist, dass ich von meinem JS dynamisch die sdk.rest.js laden kann. Aber sdk.rest.js braucht noch json2.js und das klappt dann nicht mehr. Ich habe jetzt aus allen drei Scripts einen gemacht. Ist zwar nicht ideal aber es funktioniert.

    LG, Martin



    Mittwoch, 21. März 2012 08:12

Alle Antworten

  • Hallo Martin!

    Ist das SDK-Object im onload von Angebot und Auftrag geladen? Was ist im in der Verkaufschance anders, das es dort funktioniert?

    Was machst du in der Zeile entityTypeName + "Id,LineItemNumber",

    Ich nehme an die Variable LineItemNumber ist global definiert.
    Dann muss die Zeile: entityTypeName + "Id,LineItemNumber", muss sicher entityTypeName + "Id",LineItemNumber, heißen.


    Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de

    Montag, 12. März 2012 12:35
  • Hallo Andreas,

    in der Verkaufschance sind die Produkte unter Informationen->Vertragspositionen zu finden. Hier funktioniert es mit die zwei neue Buttons "Vertragsposition rauf" bzw. "Vertragsposition runter" richtig:

    In der Angebot ist es aber unter Verknüpft->Allgemein->Produkte. Hier sagt er mir "'SDK' is undefined".

     

    Im SDK hat die Funktion retrieveRecord folgende Parameter:

    retrieveRecord: function (id, type, select, expand, successCallback, errorCallback) {

    In der Zeile  entityTypeName + "Id,LineItemNumber", sage ich im welche Felder ich mit dem Select abfrage. Es können drei Fälle sein: "OpportunityProductId,LineItemNumber" oder "QuoteDetailId,LineItemNumber" oder "SalesOrderDetailId,LineItemNumber".

    LG, Martin

    Montag, 12. März 2012 13:04
  • Versuch mal für die Entität wo es nicht funktioniert mit dem Aufruf

    frames[0].SDK.REST.retrieveRecord...

    Montag, 12. März 2012 13:53
  • Hallo,

    das hat leider auch nicht geholfen:

    SCRIPT5007: Unable to get value of the property 'SDK': object is null or undefined 

    LG, Martin

    Montag, 12. März 2012 14:05
  • Dann versuch das SDK Script vorher dynamisch einzubinden..

    	try {
    	
    		var JScriptWebResourceUrl = "../WebResources/<scriptname>.js";
    		var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    		xmlHttp.open("GET", JScriptWebResourceUrl, false);
    		xmlHttp.send();
    
    
    		eval(xmlHttp.responseText);
    		
        } 
        catch(e)
    	{ 
    		alert(e.message);
    	}

    Montag, 12. März 2012 14:12
  • Hallo Martin!

    Die Angebotspositionen sind Produkte. Lade das SDK-Objekt im onload vom Produkt.


    Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de

    Montag, 12. März 2012 15:23
  • Hallo,

    das hat mich ein wenig weiter gebracht.....jetzt kennt er SDK schon. Aber im SDK.REST.js Script wird dann weiter JSON verwendet und diesen kennt er nicht mehr, obwohl ich den json2.js in meinem Script auch dynamisch eingebunden habe.

    Den JSON wird im SDK.REST öffters verwenden.....ich wurde nur ungern in jede Funktion die dynamische Einbindung machen. Gibt es noch andere Möglichkeit?

    LG, Martin

    Montag, 12. März 2012 15:38
  • Hallo Andreas,

    das habe ich gerade ausprobiert (sdk.rest.js und json2.js sind jetzt im Angebot und Angebot(Produkt) Formular->Formulareigenschaften->Formularbibliotheken drin)...ohne Erfolg.  Mich hätte auch gewundert, wenn das funktioniert hätte.....es wird ja den Angebot-Formular gezeigt und in diesem das Angebot(Produkt)-Grid bzw. Ansicht, aber nicht Angebot(Produkt)-Formular.

    LG, Martin

    Montag, 12. März 2012 15:45
  • Moin Martin, 

    wäre es denn nicht eine Möglichkeit alle .js Dateien im Auftrags-Formular zu laden und an in dem Ribbon-Script auf diese per XSS zuzugreifen? Ich hab's noch nicht ausprobiert, aber das müsste eigentlich gehen: 

    (function(){
    
    	// get the top window
    	var topWin = window.top,
    	      onloadFrame = topWin.frames[0];
    
    	// go to the the "onload" level and grap the required libs.
    	var libA = onloadFrame.contentWindow.libA,
    	      libB = onloadFrame.contentWindow.libB;
    
    	// us the libs..
    }());

    Grüße

    Daniel



    • Bearbeitet thuld Mittwoch, 21. März 2012 07:49 Fehler im code
    Mittwoch, 21. März 2012 07:40
  • Hallo Daniel,

    das letzt Stand ist, dass ich von meinem JS dynamisch die sdk.rest.js laden kann. Aber sdk.rest.js braucht noch json2.js und das klappt dann nicht mehr. Ich habe jetzt aus allen drei Scripts einen gemacht. Ist zwar nicht ideal aber es funktioniert.

    LG, Martin



    Mittwoch, 21. März 2012 08:12
  • Hallo Martin,

    ihr nutzt diese Funktion sicherlich nur inhouse - aber genau diese Funktion bräuchte ich ausschließlich für Invoice Detail. Gibt es eine Möglichkeit, dieses Script von euch zu bekommen bzw. zu kaufen?

    Danke und Gruß,

    Peter

    Mittwoch, 10. Oktober 2012 16:16
  • Hallo Peter,

    ja wir nutzen es momentan nur intern und für Rechnungen noch nicht. Bitte um Kontakt per Email m.pecuch@gekko.at 

    LG, Martin

    Donnerstag, 11. Oktober 2012 08:11