SQL-Replace-Funktion (Printdefinition EMail/Fax) in EMail-Text funktioniert nicht
Meike Schlenker
Hallo,in der Printdefinition des Angebots möchte ich gerne folgende Abfrage in den E-Mail-Text einbinden. Leider wird die Replace-Funktion nicht ausgeführt:
SELECT
+ cast(case T0.Gender when 'M' then 'Sehr geehrter Herr ' + T0.Name +',' when 'F' then 'Sehr geehrte Frau ' + T0.Name +',' ELSE 'Sehr geehrte Damen und Herren,' end AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000211]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000212]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ Replace(Replace(cast('[@U0000560]' AS nvarchar(max)),'xxtelefon',T2.OfficeTel),'xxemail',T2.email)
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000214]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast((T2.FirstName + ' ' + T2.LastName) AS nvarchar(max))
FROM
OQUT T3,
OCPR T0,
OUSR T1,
OHEM T2
WHERE T3.DocNum = '[%DocNum]'
AND T3.CntCtCode = T0.CntCtCode
AND T3.SLPCode = T2.empID
AND T2.empID = T1.INTERNAL_K
Wäre schön, wenn mir jemand helfen könnte, da ich schon viele Möglichkeiten ausgeschöpft habe, die mir nicht geholfen haben.
Gruß Meike
Philipp Knecht
Hallo MeikeJa ich sehe die Herausforderung.
Es ist so dass zuerst die Queries ausgeführt werden und dann im Resultat diese Platzhalter ersetzt werden.
Deshalb wirst du wohl 2 verschiedene Texte verwenden müssen.
hth
Meike Schlenker
Was genau meinst du mit zwei verschiedenen Texten?Sascha Balke
Hallo Meike,die Query kommt mir bekannt vor. ;)
So wir es ausschaut wird der Wert (Platzhalter) aus Textbaustein über das Replace nicht richtig ausgelesen.
Fehler konnte ich syntaktisch nicht feststellen.
Wenn du es so versuchst, wirst du sehen, dann funktioniert es.
+ REPLACE(REPLACE(cast('Ich bin eine leere Textzeile und diene nur als Platzhalter. xxtelefon xxemail' AS nvarchar(max)),'xxtelefon',T2.OfficeTel),'xxemail',T2.email)Mit Replace gehst du von innen nach außen, was du bräuchtest wäre genau umgekehrt. Hier ist mir aber keine Möglichkeit bekannt.
Auch die Funktion "Declare" brachte nicht den gewünschten Erfolg. Ich hatte die Vermutung dass der Textbaustein zu spät ausgelesen wird und habe es wie folgt versucht:
declare @TB AS nvarchar(max)
set @TB = '[@U0000559]'
SELECT
.......
..............
+ REPLACE(cast(@TB as nvarchar(max)), 'xxtelefon',T2.OfficeTel)
..............
.......
Leider brachte dies auch nicht den gewünschten Erfolg.
Sobald jedoch deine "Platzhalter", welche du ersetzen möchtest, in dem Textbausteinen sind, scheint er damit nicht umgehen zu können. Im Grunde hättest du dann Platzhalter in Platzhalter, denn etwas anderes ist der Textbaustein, den du angibst ja nicht.
Hier müsste Phlipp noch mal schauen, ob dort etwas machbar ist oder du machst es, wie von ihm schon angesprochen, über mehrere Textbausteine. Diese kannst du ja via Cast etc. dort so einbringen, dass es wieder einen zusammengesetzten Text ergibt. Es sind dann zwar mehrere Textbausteine, die du verwenden musst, nur sehe ich so keine andere Möglichkeit.
Alternative schaue dir noch mal die original Query an, welche ich damals gepostet habe.
Hoffe es hilft dir weiter.
Meike Schlenker
Vielen Dank für deine Hilfe.Ich habe nun den Text aus den vordefinierten Texten gewählt. Da funktionier die Replace Funktion auch wunderbar.
Jedoch habe ich nun ein neues Problem:
SELECT
+ cast(case T0.Gender when 'M' then 'Sehr geehrter Herr ' + T0.Name +',' when 'F' then 'Sehr geehrte Frau ' + T0.Name +',' ELSE 'Sehr geehrte Damen und Herren,' end AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ Replace(Replace(cast(T4.Text As nvarchar(max)),'@@telefon',T2.OfficeTel+T2.OfficeExt),'@@email',T2.email)
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000214]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast((T2.FirstName + ' ' + T2.LastName) AS nvarchar(max))
FROM
OQUT T3,
OCPR T0,
OHEM T2 INNER JOIN OUSR T1 ON T2.userId = T1.INTERNAL_K,
OPDT T4
WHERE T3.DocNum = '[%DocNum]'
AND T4.TextCode = 'Vorlauftext Angebot'
AND T3.CntCtCode = T0.CntCtCode
Am Ende des Textes soll der Name des aktuell angemeldeten Benutzers stehen. Jedoch klappt das nicht. Anstelle meines Namens steht irgendein anderer aus der Firma. Den Sinn habe ich noch nicht verstanden, da ich eigentlich der Meinung bin, das die Abfrage so in Ordnung ist.
Aber vielleicht irre ich mich ;-)
Philipp Knecht
Hi Meike dann versuch:... ON T2.userId = '[%UserId]'
hth
Meike Schlenker
Danke.Habe ich ausprobiert, jetzt wird gar kein Text mehr angezeigt...
Gruß Meike
Philipp Knecht
Hallo MeikeBei mir hat eine ähnliche Query funktioniert.
Was für eine Version verwendest du dann?
Gruss
Meike Schlenker
coresuite 2.50designer 1.91
sap pl45
Meike Schlenker
Hier ist nochmal die komplette Abfrage:
SELECT
+ cast(case T0.Gender when 'M' then 'Sehr geehrter Herr ' + T0.Name +',' when 'F' then 'Sehr geehrte Frau ' + T0.Name +',' ELSE 'Sehr geehrte Damen und Herren,' end AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ Replace(Replace(cast(T4.Text As nvarchar(max)),'@@telefon',T2.OfficeTel+T2.OfficeExt),'@@email',T2.email)
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000214]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast((T2.FirstName + ' ' + T2.LastName) AS nvarchar(max))
FROM
OQUT T3,
OCPR T0,
OHEM T2 INNER JOIN OUSR ON T2.UserId = '[%UserId]',
OPDT T4
WHERE T3.DocNum = '[%DocNum]'
AND T4.TextCode = 'Vorlauftext Angebot'
AND T3.CntCtCode = T0.CntCtCode
Philipp Knecht
Hi MeikeUserId matcht auf OUSR nicht OHEM
hth
Meike Schlenker
Jetzt bin ich aber komplett verwirrt. Das Feld UserId gibt es doch garnicht in der Tabelle OUSR....Verbunden sind die beiden Tabellen OHEM und OUSR über INTERNAL_K. Oder verstehe ich das falsch?
Also würde ich die Verbindung der beiden so schreiben:
SELECT ... FROM ... OHEM INNER JOIN OUSR ON OHEM.userid = OUSR.internal_k
WHERE OUSR.userid = '[%UserID]'
Oder wäre das doppeltgemoppelt?
Philipp Knecht
HalloNaja..Das Feld gibts schon habe aber geshen dass dui OHEM nehmen möchstest was natürlich auch geht.
Nur ist mir jetzt nicht mehr klar wieso du überhaupt OUSR joinst weil ich denke dass es folgendermassen auch geht:
SELECT
+ cast(case T0.Gender when 'M' then 'Sehr geehrter Herr ' + T0.Name +',' when 'F' then 'Sehr geehrte Frau ' + T0.Name +',' ELSE 'Sehr geehrte Damen und Herren,' end AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ REPLACE(REPLACE(cast(T4.Text AS nvarchar(max)),'@@telefon',T2.OfficeTel+T2.OfficeExt),'@@email',T2.email)
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast('[@U0000214]' AS nvarchar(max))
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)
+ cast((T2.FirstName + ' ' + T2.LastName) AS nvarchar(max))
FROM
OQUT T3,
OCPR T0,
OHEM T2,
OPDT T4
WHERE T3.DocNum = '[%DocNum]'
AND T4.TextCode = 'Vorlauftext Angebot'
AND T3.CntCtCode = T0.CntCtCode
AND T2.userId = '[%UserId]'
hth
Meike Schlenker
Ja, das frag ich mich auch... :>oHabe dei Abfrage von dir einfach mal kopiert und bekomme keinen Text angezeigt... :cry:
Meike Schlenker
Ich habe grade folgende Abfrage in der Emailfunktion getestet:
SELECT firstname, lastname FROM OHEM WHERE UserId = '[%UserId]'
Funktioniert auch nicht!
Philipp Knecht
Hallo MeikeHier geht es.
Der Parameter wird dann zur Laufzeit von coresuite designer ersetzt.
Mach einfach anstelle '[%UserId]' mal ne '1' rein und du wirst sehen...
hth
Meike Schlenker
Wenn ich '[%UserId]' durch eine Zahl ersetze funktioniert es bei dieser abfrage:
SELECT firstname, lastname FROM OHEM WHERE UserId = 6
Wenn ich aber wieder meine große Abfrage verwende, funktioniert es natürlich nicht.
Ich mache nichts anderes, als die Abfrage von dir zu kopieren!
Philipp Knecht
Hallo nochmalsWenn ich in der grossen Query die Where Bedingung an meine DB anpasse:
WHERE T3.DocNum = '29'
AND T4.TextCode = 'Standard'
AND T3.CntCtCode = T0.CntCtCode
AND T2.userId = '1'
klappts.
Ich krieg dann die Spalte mit:
Sehr geehrter Herr Paul Meier, Dies ist ein vordefinierter Text, der in allen Belegen verwendet werden kann. mfg Hr. Müller [@U0000214] Manfred Manager
zurück.
hth
Pit Toldi
Hallo,wir habe in dem Angebot auch was hinterlegt, evtl hilft dir das ja.
Ist zwar nicht ganz optimal aber es klappt :)
SELECT CASE WHEN
((SELECT LEFT(T0.[Name],4) FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode WHERE T1.DocEntry = [%DocEntry])='Herr')
Then (SELECT 'Sehr geehrter ' + Replace(T0.[Name], 'Herrn', 'Herr') +
',
Anbei das gewünschte Angebot.
Über Ihren Auftrag würden wir uns sehr freuen.
Mit freundlichen Grüßen
-----------------------------------------------------------------
STIEFEL DIGITALPRINT GmbH
'+ T2.firstName +' ' +T2.lastName +'
Felix-Wankel-Ring 13a 85101 Lenting
Telefon: '+T2.officeTel +'
Telefax: '+T2.fax +'
E-Mail: '+T2.email +'
Internet: www.stiefel-online.de
Erfüllungsort und Gerichtsstand Ingolstadt
Handelsregister Ingolstadt HRB 1233
GF.: Heinrich und Bernhard Stiefel
USt-IdNr.: DE 128594404
-----------------------------------------------------------------'
FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])
ELSE CASE WHEN
((SELECT LEFT(T0.[Name],4) FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode WHERE T1.DocEntry = [%DocEntry])='Frau')
Then (SELECT 'Sehr geehrte ' + T0.[Name] +
',
Anbei das gewünschte Angebot.
Über Ihren Auftrag würden wir uns sehr freuen.
Mit freundlichen Grüßen
-----------------------------------------------------------------
STIEFEL DIGITALPRINT GmbH
'+ T2.firstName +' ' +T2.lastName +'
Felix-Wankel-Ring 13a 85101 Lenting
Telefon: '+T2.officeTel +'
Telefax: '+T2.fax +'
E-Mail: '+T2.email +'
Internet: www.stiefel-online.de
Erfüllungsort und Gerichtsstand Ingolstadt
Handelsregister Ingolstadt HRB 1233
GF.: Heinrich und Bernhard Stiefel
USt-IdNr.: DE 128594404
-----------------------------------------------------------------'
FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])
ELSE (SELECT 'Sehr geehrte Damen und Herren,
Anbei das gewünschte Angebot.
Über Ihren Auftrag würden wir uns sehr freuen.
Mit freundlichen Grüßen
-----------------------------------------------------------------
STIEFEL DIGITALPRINT GmbH
'+ T2.firstName +' ' +T2.lastName +'
Felix-Wankel-Ring 13a 85101 Lenting
Telefon: '+T2.officeTel +'
Telefax: '+T2.fax +'
E-Mail: '+T2.email +'
Internet: www.stiefel-online.de
Erfüllungsort und Gerichtsstand Ingolstadt
Handelsregister Ingolstadt HRB 1233
GF.: Heinrich und Bernhard Stiefel
USt-IdNr.: DE 128594404
-----------------------------------------------------------------'
FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])
END END
Meike Schlenker
Hallo,vielen Dank für die Hilfe.
Mit dem Part klappt es:
FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID
Damit wird zwar der Belegeigentümer als Signatur angezeigt - alles andere macht aber auch keinen Sinn.
Vielen Dank nochmal für den Tip.
Gruß Meike
Gargamel
Hallo,
danke für die tolle Lösung. Ich habe diese bei uns im Unternehmen so übernommen und etwas modifiziert...
So muss ich nicht im Namen auf Herr oder Frau zurückgreifen sondern frage im Prinzip nur den Eintrag "Gender" im Ansprechpartner ab.
SELECT CASE WHEN
((SELECT T0.Gender FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])='M')
Then (SELECT 'Sehr geehrter Herr ' + T0.[Name] +
',
anbei erhalten Sie das gewünschte Angebot.
Über Ihren Auftrag würden wir uns sehr freuen.
Mit freundlichen Grüßen
'+ T2.homeStreet +' '+ T2.firstName +' ' +T2.lastName +'
'+ T2.jobTitle +'
-----------------------------------------------------------------------
Telefon: '+T2.officeTel +' '+T2.officeExt +'
Telefax: '+T2.fax +'
E-Mail: '+T2.email +'
-----------------------------------------------------------------------
XYZ GmbH & Co. KG
'
FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])
ELSE CASE WHEN
((SELECT T0.Gender FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])='F')
Then (SELECT 'Sehr geehrte Frau ' + T0.[Name] +
',.....
Da wir auch englischsprachige Empfänger haben müsste die Abfrage noch etwas erweitert werden. Ich scheitere gerade an der doppelten Abfrage.
Ich habe im Ansprechpartner unter Bemerkung 1 das Feld mit "de" oder "en" gepflegt.
Soll heißen wenn im Feld "de" vorhanden ist soll der deutsche Text greifen, bei "en" der englische...
Wie muss jetzt der Befehl aussehen um da zu unterscheiden... ?
((SELECT T0.Gender FROM OCPR T0 INNER JOIN O@@RDR T1 ON T0.CntctCode = T1.CntctCode INNER JOIN OHEM T2 ON T1.OwnerCode = T2.empID WHERE T1.DocEntry = [%DocEntry])='M' AND T0.Notes1 = 'de')
Then (SELECT 'Sehr geehrter Herr ' + T0.[Name] +
Im Grunde muss ich ja nur die Abfrage um AND T0.Notes1 = 'de' erweitern oder... ? Irgendwie klappt das aber nicht so ganz. Habt ihr da vielleicht einen Tip?
Ich erhalte immer folgende Fehlermeldung.
Get data: The multi-part identifier "T0.Notes1" could not be bound.
The multi-part identifier "T0.Notes1" could not be bound.
The multi-part identifier "T0.Notes1" could not be bound.
The multi-part identifier "T0.Notes1" could not be bound.
The multi-part identifier "T0.Notes1" could not be bound.
Gruß
Sascha
Maurice Quack
Hallo Sascha,
Ich bin zwar kein Coresuite-Experte, aber wir nehmen für mehrsprachige Texte in E-Mails angelegte Texte, die auch Übersetzungen hinterlegt haben und binden diese dann auf folgende Weise ein:
Select CAST(CASE T1.Gender WHEN 'M' THEN '[@U0001620] ' usw.
das @"U0001620" ersetzt du dann durch deinen mehrsprachig angelegten Text, der sich entsprechend der eingestellten Dokumentensprache ändert.
Please sign in to leave a comment.
Comments
0 comments