Soap anfrage ans CRM keine Russischen Zeichen

22. Oktober 2015 13:55

Hallo Zusammen,

ich habe eine Frage von der ich gar nicht Sicher bin ob man sie hier im Forum beantworten kann, aber ich versuche es mal. In unserem CRM 2011 setzen wir ein MailMerge Addon ein, welches uns die Daten aus dem CRM in aufgehübschte Worddokumente zieht. In meinem Fall jetzt für Angebote. Da unsere Angebote von der Aufmachung her hinreichend komplex werden reicht das MailMerge Tool alleine nicht aus. Wir setzen darüber noch ein Makro das über bestimmte Platzhalter läuft und diese mit CRM Daten ersetzt. So zum Beispiel auch die Produktbeschreibung die wir bei uns im CRM mit TinyMCE erstellen. Das bedeutet der String der uns im Word geliefert wird enthält sehr viele HTML Tags. Diese sollen mit Hilfe des Scripts entfernt werden. Solange wir in deutsch oder englisch schreiben funktioniert alles Problemlos. Doch wenn wir russische Zeichen verwenden erscheinen als Text nur noch ?????. Wenn ich mir die Felder ansehe die in der Empfängerliste im Word ankommen sehe ich, dass mein Beschreibungstext sauber mit den HTML-Tags aus dem CRM heraus an Word übergeben wird. Wenn ich das Seriendruckfeld so wie es ist abdrucken lasse stehen in meinem Word russische Zeichen. Soweit so schön. Nun muss aber ja erwähntes Skript drüber laufen um den Beschreibungstext von den HTML-Tags zu befreien und statt dessen mit Formatierungen zu versehen. Da kommt es zum Fehler, denn sobald ich das Feld im VBA Makrocode auslesen will stehen da auf einmal die ??? drin. Wenn ich über Doc.MailMerge.DataSource.DataFields("Feldname") gehe ist das so aber auch wenn ich mit Hilfe der Angebotsproduktid das ganze über Soap direkt aus dem CRM auslesen will kommt der Text mit ??? zurück. Was mache ich da nur falsch?
Hier der VBA Makrocode mit dem ich die Variable für den Beschreibungstext auslesen möchte:
Code:
Function replaceEntityDetailHTML(quotedetailid As String, ATT As String, placeholder As String)

Dim xml As Variant

xml = ""
xml = xml + "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "utf-8" & Chr(34) & "?>"
xml = xml + "<soap:Envelope xmlns:soap=" & Chr(34) & "http://schemas.xmlsoap.org/soap/envelope/" & Chr(34) & " xmlns:xsi=" & Chr(34) & "http://www.w3.org/2001/XMLSchema-instance" & Chr(34) & " xmlns:xsd=" & Chr(34) & "http://www.w3.org/2001/XMLSchema" & Chr(34) & ">"
xml = xml + "  <soap:Header>"
xml = xml + "    <CrmAuthenticationToken xmlns=" & Chr(34) & "http://schemas.microsoft.com/crm/2007/WebServices" & Chr(34) & ">"
xml = xml + "      <AuthenticationType xmlns=" & Chr(34) & "http://schemas.microsoft.com/crm/2007/CoreTypes" & Chr(34) & ">0</AuthenticationType>"
xml = xml + "      <OrganizationName xmlns=" & Chr(34) & "http://schemas.microsoft.com/crm/2007/CoreTypes" & Chr(34) & ">" + org + "</OrganizationName>"
xml = xml + "      <CallerId xmlns=" & Chr(34) & "http://schemas.microsoft.com/crm/2007/CoreTypes" & Chr(34) & ">00000000-0000-0000-0000-000000000000</CallerId>"
xml = xml + "    </CrmAuthenticationToken>"
xml = xml + "  </soap:Header>"
xml = xml + "<soap:Body>"
xml = xml + "<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"
xml = xml + "<fetchXml>"

xml = xml + "&lt;fetch mapping='logical'&gt;"
   xml = xml + "&lt;entity name='quotedetail'&gt;"
     
      xml = xml + "&lt;attribute name='" + ATT + "' /&gt;"
     
      xml = xml + "&lt;filter type='and'&gt;"
         xml = xml + "&lt;condition attribute='quotedetailid' operator='eq' value='" + quotedetailid + "' /&gt;"
      xml = xml + "&lt;/filter&gt;"
   xml = xml + "&lt;/entity&gt;"
xml = xml + "&lt;/fetch&gt;"

xml = xml + "</fetchXml>"
xml = xml + "</Fetch>"
xml = xml + "</soap:Body>"
xml = xml + "</soap:Envelope>"
xml = xml + ""
'MsgBox (xml)

Dim httprequest As Object
Set httprequest = CreateObject("Msxml2.XMLHTTP")
httprequest.Open "post", service, False, "", ""
httprequest.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch"
httprequest.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
httprequest.setRequestHeader "Content-Length", Len(xml)
httprequest.sEnd (xml)

Dim result As Object
Set result = httprequest.responseXML
'MsgBox (result.xml)

Dim resultSet As String
resultSet = result.Text
resultSet = Replace(resultSet, "&lt;", "<")
resultSet = Replace(resultSet, "&gt;", ">")

Dim gtpos As Variant
gtpos = InStr(1, resultSet, "<result>", vbTextCompare) - 1
resultSet = "<resultset>" + Right(resultSet, Len(resultSet) - gtpos)

resultSet = Replace(resultSet, "<resultset>", "")
resultSet = Replace(resultSet, "</resultset>", "")

resultSet = Replace(resultSet, "<result>", "")
resultSet = Replace(resultSet, "<result>", "")

resultSet = Replace(resultSet, "<" + ATT + ">", "")
resultSet = Replace(resultSet, "</" + ATT + ">", "")
'MsgBox (resultSet)
resultSet = Replace(resultSet, "&nbsp;", Chr(13))

gtpos = InStr(1, resultSet, "<quotedetailid>", vbTextCompare) - 1
resultSet = Left(resultSet, gtpos)
End Function

Im resultSet steht nun Text mit ???. Dachte es hätte vielleicht was mit dem Encoding zu tun, aber auch koi8-r hilft hier nicht. Ich bin Ratlos normalerweise müsste Soap doch egal sein welche Zeichen es mir zurück gibt. Oder muss ich irgendwie anders auf mein Beschreibungsfeld zugreifen?