You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2016/01/15 11:18:00 UTC
svn commit: r1724763 - in /ofbiz/trunk/applications/marketing:
config/MarketingUiLabels.xml servicedef/services.xml
src/org/ofbiz/sfa/vcard/VCard.java
Author: jleroux
Date: Fri Jan 15 10:18:00 2016
New Revision: 1724763
URL: http://svn.apache.org/viewvc?rev=1724763&view=rev
Log:
A slightly modified patch from Chula Lathong for <<Bug on SFA vcard import.>> https://issues.apache.org/jira/browse/OFBIZ-6795
Error occur when create Lead/Contact from Vcard.
This patch will improve importVcard service to able to create Lead/Contact from Vcard and display error messages when Vcard has invalid values.
jleroux: I simply changed the importVCard service transaction-timeout from 72000 (20 hours!) to 7200. Also added corresponding French labels
Modified:
ofbiz/trunk/applications/marketing/config/MarketingUiLabels.xml
ofbiz/trunk/applications/marketing/servicedef/services.xml
ofbiz/trunk/applications/marketing/src/org/ofbiz/sfa/vcard/VCard.java
Modified: ofbiz/trunk/applications/marketing/config/MarketingUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/config/MarketingUiLabels.xml?rev=1724763&r1=1724762&r2=1724763&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/config/MarketingUiLabels.xml (original)
+++ ofbiz/trunk/applications/marketing/config/MarketingUiLabels.xml Fri Jan 15 10:18:00 2016
@@ -3185,6 +3185,18 @@
<value xml:lang="zh">导å
¥çº¿ç´¢</value>
<value xml:lang="zh-TW">å¯å
¥ç·ç´¢</value>
</property>
+ <property key="SfaImportVcardDuplicatedVcardError">
+ <value xml:lang="en">All parties in this vcard are duplicated.</value>
+ <value xml:lang="fr">Tous les acteurs de cette vcard sont dupliqués.</value>
+ </property>
+ <property key="SfaImportVCardEmailFormatError">
+ <value xml:lang="en">incorrect email format.</value>
+ <value xml:lang="fr">Format de l'addresse courriel incorrect.</value>
+ </property>
+ <property key="SfaImportVcardNameMissingError">
+ <value xml:lang="en">first name or last name missing.</value>
+ <value xml:lang="fr">Prénom ou nom manquant.</value>
+ </property>
<property key="SfaImportVCardError">
<value xml:lang="de">Fehler beim importieren von VCard: ${errorString}</value>
<value xml:lang="en">Error during import data from VCard: ${errorString}</value>
Modified: ofbiz/trunk/applications/marketing/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/servicedef/services.xml?rev=1724763&r1=1724762&r2=1724763&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/marketing/servicedef/services.xml Fri Jan 15 10:18:00 2016
@@ -515,7 +515,7 @@ under the License.
</service>
<!-- VCard services -->
- <service name="importVCard" engine="java" location="org.ofbiz.sfa.vcard.VCard" invoke="importVCard">
+ <service name="importVCard" engine="java" location="org.ofbiz.sfa.vcard.VCard" invoke="importVCard" transaction-timeout="7200">
<attribute name="infile" type="java.nio.ByteBuffer" mode="IN" optional="false"/>
<attribute name="partyId" type="String" mode="OUT" optional="false"/>
<attribute name="partyType" type="String" mode="IN" optional="true"/>
Modified: ofbiz/trunk/applications/marketing/src/org/ofbiz/sfa/vcard/VCard.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/src/org/ofbiz/sfa/vcard/VCard.java?rev=1724763&r1=1724762&r2=1724763&view=diff
==============================================================================
--- ofbiz/trunk/applications/marketing/src/org/ofbiz/sfa/vcard/VCard.java (original)
+++ ofbiz/trunk/applications/marketing/src/org/ofbiz/sfa/vcard/VCard.java Fri Jan 15 10:18:00 2016
@@ -28,25 +28,12 @@ import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
-import net.wimpi.pim.Pim;
-import net.wimpi.pim.contact.basicimpl.AddressImpl;
-import net.wimpi.pim.contact.basicimpl.EmailAddressImpl;
-import net.wimpi.pim.contact.basicimpl.PhoneNumberImpl;
-import net.wimpi.pim.contact.io.ContactMarshaller;
-import net.wimpi.pim.contact.io.ContactUnmarshaller;
-import net.wimpi.pim.contact.model.Address;
-import net.wimpi.pim.contact.model.Communications;
-import net.wimpi.pim.contact.model.Contact;
-import net.wimpi.pim.contact.model.EmailAddress;
-import net.wimpi.pim.contact.model.Organization;
-import net.wimpi.pim.contact.model.OrganizationalIdentity;
-import net.wimpi.pim.contact.model.PersonalIdentity;
-import net.wimpi.pim.contact.model.PhoneNumber;
-import net.wimpi.pim.factory.ContactIOFactory;
-import net.wimpi.pim.factory.ContactModelFactory;
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.FileUtil;
@@ -68,6 +55,23 @@ import org.ofbiz.service.GenericServiceE
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ServiceUtil;
+import net.wimpi.pim.Pim;
+import net.wimpi.pim.contact.basicimpl.AddressImpl;
+import net.wimpi.pim.contact.basicimpl.EmailAddressImpl;
+import net.wimpi.pim.contact.basicimpl.PhoneNumberImpl;
+import net.wimpi.pim.contact.io.ContactMarshaller;
+import net.wimpi.pim.contact.io.ContactUnmarshaller;
+import net.wimpi.pim.contact.model.Address;
+import net.wimpi.pim.contact.model.Communications;
+import net.wimpi.pim.contact.model.Contact;
+import net.wimpi.pim.contact.model.EmailAddress;
+import net.wimpi.pim.contact.model.Organization;
+import net.wimpi.pim.contact.model.OrganizationalIdentity;
+import net.wimpi.pim.contact.model.PersonalIdentity;
+import net.wimpi.pim.contact.model.PhoneNumber;
+import net.wimpi.pim.factory.ContactIOFactory;
+import net.wimpi.pim.factory.ContactModelFactory;
+
public class VCard {
public static final String module = VCard.class.getName();
public static final String resourceError = "MarketingUiLabels";
@@ -90,8 +94,10 @@ public class VCard {
try {
ContactIOFactory ciof = Pim.getContactIOFactory();
ContactUnmarshaller unmarshaller = ciof.createContactUnmarshaller();
+ unmarshaller.setStrict(false);
Contact[] contacts = unmarshaller.unmarshallContacts(in);
+ int contactsCount = 1;
for (Contact contact: contacts) {
PersonalIdentity pid = contact.getPersonalIdentity();
if (!isGroup) {
@@ -146,6 +152,14 @@ public class VCard {
}
}
if (UtilValidate.isNotEmpty(email)) {
+ InternetAddress emailAddr;
+ try {
+ emailAddr = new InternetAddress(email);
+ emailAddr.validate();
+ } catch (AddressException e) {
+ String emailFOrmatErrMsg = UtilProperties.getMessage(resourceError, "SfaImportVCardEmailFormatError", locale);
+ return ServiceUtil.returnError(pid.getFirstname() + " " + pid.getLastname() + " has " + emailFOrmatErrMsg);
+ }
serviceCtx.put("emailAddress", email);
}
for (Iterator<?> iter = communications.getPhoneNumbers(); iter.hasNext();) {
@@ -175,8 +189,12 @@ public class VCard {
}
OrganizationalIdentity oid = contact.getOrganizationalIdentity();
// Useful when creating a contact with more than OOTB
- if (!isGroup) {
- serviceCtx.put("personalTitle", oid.getTitle());
+ if (!isGroup && oid != null && oid.getTitle() != null) {
+ String personalTitle = oid.getTitle().replace("\\","").replaceAll("\uFFFD", " ");
+ if (personalTitle.length() > 100) {
+ personalTitle = oid.getTitle().replace("\\", "").replaceAll("\uFFFD", " ").substring(0, 100);
+ }
+ serviceCtx.put("personalTitle", personalTitle);
}
// Needed when creating an account (a PartyGroup)
@@ -184,7 +202,7 @@ public class VCard {
//serviceCtx.put("partyRole", oid.getRole()); // not used yet,maybe useful later
if (oid.hasOrganization()) {
Organization org = oid.getOrganization();
- serviceCtx.put("groupName", org.getName());
+ serviceCtx.put("groupName", org.getName().replace("\\", ""));
}
}
@@ -197,8 +215,34 @@ public class VCard {
serviceCtx.put(entry.getKey(), entry.getValue());
}
}
- Map<String, Object> resp = dispatcher.runSync(serviceName, serviceCtx);
- result.put("partyId", resp.get("partyId"));
+ List<GenericValue> persons = EntityQuery.use(delegator).from("Person").where(
+ "firstName", serviceCtx.get("firstName"),
+ "lastName", serviceCtx.get("lastName")
+ ).queryList();
+ boolean blockPerson = false;
+ for (GenericValue person: persons) {
+ GenericValue partyStatus = EntityQuery.use(delegator).from("PartyStatus").where(
+ "partyId", person.get("partyId")).orderBy("-statusDate").queryFirst();
+ if (!partyStatus.get("statusId").equals("PARTY_DISABLED")) {
+ blockPerson = true;
+ }
+ }
+ if (!blockPerson) {
+ String nameMissingErrMsg = UtilProperties.getMessage(resourceError, "SfaImportVcardNameMissingError", locale);
+ if (!isGroup && serviceCtx.get("lastName") == null) {
+ return ServiceUtil.returnError(serviceCtx.get("firstName") + " " + nameMissingErrMsg);
+ }
+ if (!isGroup && serviceCtx.get("firstName") == null) {
+ return ServiceUtil.returnError(serviceCtx.get("lastName") + " " + nameMissingErrMsg);
+ }
+ Map<String, Object> resp = dispatcher.runSync(serviceName, serviceCtx);
+ result.put("partyId", resp.get("partyId"));
+ }
+ if (result.get("partyId") == null && contactsCount == contacts.length) {
+ String duplicatedErrMsg = UtilProperties.getMessage(resourceError, "SfaImportVcardDuplicatedVcardError", locale);
+ return ServiceUtil.returnError(duplicatedErrMsg);
+ }
+ contactsCount++;
}
} catch (GenericEntityException e) {
Debug.logError(e, module);