[gelöst] Webservice mit JavaScript nutzen Operator DieseJahr

5. März 2013 10:08

Hallo zusammen,

ich möchte per JavaScript mit folgendem Code alle Bestellnummern für unsere Bestellungen in diesem Jahr auslesen damit ich sie danach in ein Array schreiben kann. Wenn ich so eine Abfrage im CRM mache und mir anschließend das FetchXML anseh benutzt es den Operator this-year. Aber in meinem Code funktioniert das leider nicht da bekomme ich immer einen Fehler zurück. Was mache ich falsch? Oder gibt es diesen Operator für den Weg über JavaScript nicht?

Code:
var xml = "" +
   "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
   "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
   GenerateAuthenticationHeader() +
   " <soap:Body>" +
   " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
   " <q1:EntityName>opd_bestellung</q1:EntityName>" +
   " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   " <q1:Attributes>" +
   " <q1:Attribute>opd_bestellnummer_fortlaufend</q1:Attribute>" +
   " <q1:Attribute>Createdon</q1:Attribute>" +
   " </q1:Attributes>" +
   " </q1:ColumnSet>" +
   " <q1:Distinct>false</q1:Distinct>" +
   " <q1:Criteria>" +
   " <q1:FilterOperator>And</q1:FilterOperator>" +
   " <q1:Conditions>" +
   " <q1:Condition>" +
   " <q1:AttributeName>Createdon</q1:AttributeName>" +
   " <q1:Operator>This-year</q1:Operator>" +
   " </q1:Condition>" + 
   " </q1:Conditions>" +
   " </q1:Criteria>" +
   " </query>" +
   " </RetrieveMultiple>" +
   " </soap:Body>" +
   "</soap:Envelope>" +
   "";
   var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");


Viele Grüße
Nicole
Zuletzt geändert von Nicole Schmitz am 11. März 2013 10:20, insgesamt 1-mal geändert.

Re: Webservice mit JavaScript nutzen Operator DieseJahr

5. März 2013 14:33

Hallo Nicole,

warum nutzt du nicht einfach Fetch-XML für die Abfrage über den Webservice?

Siehe:
http://www.crmsoftwareblog.com/2011/07/ ... b-resource

Re: Webservice mit JavaScript nutzen Operator DieseJahr

5. März 2013 14:41

Hi,
habe es jetzt nicht getestet aber vllt funktioniert das als Operator folgendes:
<q1:Operator>new Date().getFullYear()</q1:Operator> [könnte sein dass du vllt noch ein Semikolon machen musst.]

Grüße
gE3z

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 13:29

Hallo Michael,

danke für den Link. Ich habe versucht das zu nutzen, indem ich den Code für die FetchUtil.js kopiert habe und als Webressource dem CRM zu geführt habe. Nun habe ich in meinem Formular die FetchUtil.js vor der JavaScriptdatei geladen, die darauf zugreifen will dennoch bekomme ich die Meldung FetchUtil nicht gefunden. Woran kann das liegen? Was mache ich da falsch?

Viele Grüße
Nicole

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 13:43

Hallo Nicole,

wo genau bekommst du diese Meldung?
Wie greifst du auf die neue JS Datei zu?

Hast du überprüft, ob du die Groß-Kleinschreibung beachtet hast?

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 14:23

Hallo Michael,

diesen Scriptteil führe ich im OnLoad des Formulars aus:
Code:
function GetGesamtsummePositionen(sGUIDBestellung){ debugger;
   var _oService;
   var _sOrgName = "OpdenhoffCRM";
   var _sServerUrl = Xrm.Page.context.getServerUrl();
   
   var sFetch = "<fetch mapping='logical' count='10'>" +
   "<entity name='opd_bestellung_position'>" +
   "<attribute name='opd_betragohnemwst' />" +
   "<filter type='and'>" +
   "<condition attribute = 'opd_bestellung_positionid' operator='eq' value='" + sGUIDBestellung + "'/>" +
   "</filter>" +
   "</entity>" +
   "</fetch>";
 
   _oService = new FetchUtil(_sOrgName, _sServerUrl);
   _oService.Fetch(sFetch, myCallBack);
   
   function myCallBack(results){
      alert(results[0].attributes["opd_betragohnemwst"].value);
   }

}


Das Script von der Webseite habe ich mit dem Webressourcennamen opd_FetchUtil hochgeladen. Im Formular unter Eigenschaften habe ich nun das Script opd_FetchUtil hinzugefügt und von der Reihenfolge her vor das Script das im OnLoad des Formulars ausgeführt wird gestellt, damit die Funktion FetchUtil zum Zeitpunkt des OnLoad Ereignisses schon bekannt ist. Hat mit einer anderen Scriptdatei wo ich allgemeine Scripte drin habe (opd_GlobalFunctions) auch prima funktioniert auf die Funktionen der Datei kann ich zugreifen. Nur auf die FetchUtil eben leider nicht. Da kommt dann sobald ich eine Bestellung öffne FetchUtil wäre nicht definiert. :-(

Viele Grüße
Nicole

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 15:06

Hallo Nicole,

auf welchem RU Stand seit ihr auf dem Server?

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 15:20

Hallo Michael,

auf RU11v2.

Das ist im übrigen die Javascript Fehlermeldung die kommt:
FetchUtilUndefiniert.gif
und dies die Formulareigenschaften:
Formulareigenschaften.gif


Viele Grüße
Nicole
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Webservice mit JavaScript nutzen Operator DieseJahr

6. März 2013 15:58

Hallo zusammen,

ok Problematik hat sich verändert. Habe mir das kopierte JavaScript opd_FetchUtil mal angesehen. Im Copy Paste lag der Fehler " und ' wurden falsch dargestellt. Konnte also nicht gehen. Habe diese nun ersetzt und jetzt kommt nicht mehr die Fehlermeldung das FetchUtil nicht bekannt ist. Dafür liefert mir die neue Fetch die ich da aufrufe leider nicht das gewünschte Ergebnis und ich verstehe nicht ganz warum denn ich habe sie aus einer Erweiterten Suche herauskopiert, die mir das richtige Ergebnis geliefert hat.
Hier der Code:
Code:
function GetNextBestellnr(){ debugger;
   var _oService;
   var _sOrgName = "OpdenhoffCRM";
   var _sServerUrl = Xrm.Page.context.getServerUrl();
   
   // var sFetch = "<fetch mapping='logical' count='10'>" +
   // "<entity name='opd_bestellung_position'>" +
   // "<attribute name='opd_betragohnemwst' />" +
   // "<filter type='and'>" +
   // "<condition attribute = 'opd_bestellung_positionid' operator='eq' value='" + sGUIDBestellung + "'/>" +
   // "</filter>" +
   // "</entity>" +
   // "</fetch>";
   
   var sFetch = "<fetch mapping='logical' distinct='false'>" +
   "<entity name='opd_bestellung'>" +
    "<attribute name='opd_bestellnummer_fortlaufend' />" +
    "<order attribute='opd_bestellnummer_fortlaufend' descending='false' />" +
    "<filter type='and'>" +
    "<condition attribute='createdon' operator='this-year' />" +
    "</filter>" +
   "</entity>" +
   "</fetch>";
 
   _oService = new FetchUtil(_sOrgName, _sServerUrl);
   _oService.Fetch(sFetch, myCallBack);
   
   function myCallBack(results){
      alert(results[0].attributes["opd_bestellnummer_fortlaufend"].value);
   }


Gewollt ist dass mir alle Bestellungen für dieses Jahr angezeigt werden und für diese jeweils das Attribut opd_bestellnummer_fortlaufend. In Results[0].attributes findet sich aber nur die opd_bestellid.

Was mache ich falsch?

Viele Grüße
Nicole

Re: Webservice mit JavaScript nutzen Operator DieseJahr

7. März 2013 09:12

Hallo zusammen,

vielleicht habe ichs beim ersten mal nicht richtig veröffentlicht, jetzt geht es auf jedenfall, ich bekomme die opd_bestellnummer_fortlaufend zurückgeliefert und kann sie in der myCallBack Function als alert zurückgeben. Nun möchte ich aber eigentlich den gelieferten Wert als Rückgabewert der Funktion GetNextBestellnr() haben, so dass ich folgendes machen kann var nextBestellnr = GetNextBestellnr(). Bisher ist nextBestellnr immer undefiniert. Bekomme ich das irgendwie hin?

Viele Grüße
Nicole

Re: Webservice mit JavaScript nutzen Operator DieseJahr

8. März 2013 09:28

Hallo Nicole,

warum rufst du das ganze nicht einfach anders herum auf und übergibst deine Nummer als Paramater, also:

Code:
SetNextBestellnr(results[0].attributes["opd_bestellnummer_fortlaufend"].value);

Re: Webservice mit JavaScript nutzen Operator DieseJahr

8. März 2013 09:46

Hallo Michael,

das probiere ich mal. Danke.

Viele Grüße
Nicole