/// <summary> /// Create contact /// </summary> /// <param name="contactDatabaseId">contact database id</param> /// <param name="contactJsonList">contact list</param> /// <returns>contact id</returns> public String createContact(String contactDatabaseId, ArrayList contactJsonList) { if (logger.IsDebugEnabled) { logger.Debug("createContact:createContactcontactDatabaseId=" + contactDatabaseId ); } String result = OK_RESULT; ContactDatabaseFieldAction contactDatabaseFieldAction = new ContactDatabaseFieldAction(client, userName, password); Hashtable contactFieldTable = contactDatabaseFieldAction.getContactDatabaseFields(contactDatabaseId); foreach (String str in contactJsonList) { int index = 0; if (!String.IsNullOrEmpty(str)) { String[] arrContact = str.Split(','); cn.tripolis.dialogue.contact.CreateContactRequest request = new cn.tripolis.dialogue.contact.CreateContactRequest { contactDatabaseId = contactDatabaseId, contactFields = new cn.tripolis.dialogue.contact.ContactFieldValue[arrContact.Length] }; foreach (String strContact in arrContact) { String[] arryFiled = strContact.Split(new[] { "#" }, StringSplitOptions.None); cn.tripolis.dialogue.contact.ContactFieldValue field = new cn.tripolis.dialogue.contact.ContactFieldValue { name = arryFiled[0].ToLower(), value = arryFiled[1] }; request.contactFields.SetValue(field, index++); //add contact filed to table if (contactFieldTable != null && !contactFieldTable.ContainsKey(field.name)) { contactDatabaseFieldAction.addContactField(contactDatabaseId, field.name, field.value); } } try { cn.tripolis.dialogue.contact.IDResponse response = contactService.create(request); result = response.id; if (logger.IsDebugEnabled) { logger.Debug("new contact id=" + result); } } catch (System.Web.Services.Protocols.SoapException ex) { // if the error is not caused by exist id, continue the loop if (!Util.isCodeExist(ex.Detail) || Util.getExistId(ex.Detail).Equals("")) { result = ex.Detail.InnerXml; if (logger.IsDebugEnabled) { logger.Debug("error happens in create contact, error is" + result); } continue; // throw new Exception(ex.Detail.InnerXml); } result = Util.getExistId(ex.Detail); if (logger.IsDebugEnabled) { logger.Debug("exist contact id=" + result); cn.tripolis.dialogue.contact.UpdateContactRequest updateRequest = new cn.tripolis.dialogue.contact.UpdateContactRequest(); updateRequest.id = result; updateRequest.contactFields = request.contactFields; this.contactService.update(updateRequest); } } // addContactToGroup(result, contactGroupId); } } return result; }
/// <summary> /// Import contact to database /// </summary> /// <param name="contactDatabaseId">contact database id</param> /// <param name="contactGroupId">contact group id</param> /// <param name="mailData">mail data</param> private String importContact(String contactDatabaseId, String contactGroupId, MailData mailData) { if (logger.IsDebugEnabled) { logger.Debug("importContact:contactDatabaseId=" + contactDatabaseId); } String result = OK_RESULT; ContactDatabaseFieldAction contactDatabaseFieldAction = new ContactDatabaseFieldAction(client, userName, password); Hashtable contactFieldTable = contactDatabaseFieldAction.getContactDatabaseFields(contactDatabaseId); cn.tripolis.dialogue.import.ImportContactsRequest request = new cn.tripolis.dialogue.import.ImportContactsRequest(); try { //Prepare contact CSV StringBuilder sb = new StringBuilder(); //String[] contactFieldNames = null; int index = 0; foreach (String contactList in mailData.ContactJsonList) { String[] contactFields = contactList.Split(','); //init the CSV header if (index == 0) { // contactFieldNames = new String[contactFields.Length]; foreach (String field in contactFields) { String fielName = field.Split(new[] { "#" }, StringSplitOptions.None)[0]; //add contact filed to table if (contactFieldTable != null && !contactFieldTable.ContainsKey(fielName.ToLower())) { contactDatabaseFieldAction.addContactField(contactDatabaseId, fielName, ""); } sb.Append("\"").Append(fielName).Append("\"").Append(";"); } if (contactFieldTable != null && !contactFieldTable.ContainsKey(FROMMAIL.ToLower())) { contactDatabaseFieldAction.addContactField(contactDatabaseId, FROMMAIL, ""); } sb.Append("\"").Append(FROMMAIL).Append("\"").Append(";"); if (contactFieldTable != null && !contactFieldTable.ContainsKey(SUBJECT.ToLower())) { contactDatabaseFieldAction.addContactField(contactDatabaseId, SUBJECT, ""); } sb.Append("\"").Append(SUBJECT).Append("\"").Append(";"); sb.Remove(sb.Length - 1, 1); sb.Append("\n"); } foreach (String field in contactFields) { sb.Append("\"").Append(field.Split(new[] { "#" }, StringSplitOptions.None)[1]).Append("\"").Append(";"); } sb.Append("\"").Append(mailData.FromAddress).Append("\"").Append(";"); sb.Append("\"").Append(mailData.Subject).Append("\"").Append(";"); sb.Remove(sb.Length - 1, 1); sb.Append("\n"); index++; } request.reportReceiverAddress = mailData.ReplyAddress; request.importMode = cn.tripolis.dialogue.import.importMode.SYNCHRONIZE_GROUP; request.contactGroupIds = new[] { contactGroupId }; request.extension = cn.tripolis.dialogue.import.fileExtension.CSV; request.fileName = "Contacts.csv"; request.importFile = System.Text.Encoding.UTF8.GetBytes(sb.ToString());//System.IO.File.ReadAllBytes("../../Contacts_new.csv"); cn.tripolis.dialogue.import.ImportIDResponse response = importService.importContacts(request); result = response.importId; } catch (System.Web.Services.Protocols.SoapException ex) { if (logger.IsDebugEnabled) { logger.Debug("error happens in get contact database fields, error is" + ex.Detail.InnerXml); } throw new Exception(ex.Detail.InnerXml); } return result; }