home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: InfoMgt / InfoMgt.zip / omnidemo.zip / RXACTIN.CMD < prev    next >
OS/2 REXX Batch file  |  1997-07-01  |  16KB  |  414 lines

  1. /* REXX PROGRAM */
  2. /* This file is for importing ACT! data into OmniFile or CCv2 */
  3. /* This REXX program expects OMNIFILE or CCv2 to be the host environment */
  4. /* If you are attempting to change this file, you will normally only need to change the commands in the CHANGE_REC subroutine and the user variables. */
  5.  
  6. /*********** USER VARIABLES **************/
  7. /* If useMgrOwner is set to 1 the owner and manager fields of the ACT! records will be stored as a note */
  8. /* By default, we set this variable to 0 to indicate that these fields will not be converted */
  9. /* If separateBusinesses is set to 1, then ACT records with a business name but no contact name will be */
  10. /* added to the Business database, as opposed to the Individual database */
  11. useMgrOwner = 0
  12. separateBusinesses=1
  13. /******************************************/
  14.  
  15. /*  Define field numbers */
  16. fileType=GetTypeGivenName("File")
  17. fileTypeType=GetTypeGivenName("File Type")
  18. actionType=GetTypeGivenName("Action")
  19. actionTypeType=GetTypeGivenName("Action Type")
  20. codeTypeType=GetTypeGivenName("Code Type")
  21.  
  22. /* these are field numbers for individuals */
  23. prefixFieldNum = 2
  24. middleFieldNum= 4
  25. suffixFieldNum = 6
  26. IaddressFieldNum = 12
  27. IphoneFieldNum = 13
  28. IcodeFieldNum = 14
  29. InotesFieldNum = 15
  30.  
  31. /* these are field numbers for businesses */
  32. BaddressFieldNum = 4
  33. BphoneFieldNum = 5
  34. BcodeFieldNum = 6
  35. BnotesFieldNum = 7
  36.  
  37. addressTypeFieldNum = 1
  38. addressAddressFieldNum = 3
  39. addressCityFieldNum = 4
  40. addressStateFieldNum = 5
  41. addressZipFieldNum = 6
  42. addressNoteFieldNum = 8
  43. phoneTypeFieldNum = 1
  44. phonePhoneFieldNum = 2
  45. phoneNoteFieldNum = 3
  46. fileTypeFieldNum = 1
  47. fileNameFieldNum = 2
  48. codeTypeField = 1
  49. actionTypeField = 1
  50. actionCompletedField = 2
  51. actionDateField = 3
  52. actionTimeField = 4
  53. actionFreqField = 5
  54. actionSummaryField = 7
  55.  
  56.  
  57. /* MAIN SUBROUTINE */
  58. szEnvironment = address()
  59. IF ((szEnvironment <> "Omnifile") & (szEnvironment <> "Contacts")) THEN DO
  60.     SAY "This rexx file can only be run by Omnifile or Contact Connection, not directly."
  61.     RETURN 1
  62.     END
  63.  
  64. /* Load the Rexx variables based on the arguments the user passed in. */
  65. /* FileIn1 has the simple dumped data; FileIn2 has the multiline data like notes */
  66. FileIn1 = ARG(1)
  67. FileIn2 = ARG(2)
  68.  
  69. /* Make sure the required arguments were given. */
  70. IF FileIn1 = "" THEN DO
  71.     SAY "The following arguments are expected: FILEIN1 FILEIN2"
  72.     SAY "    FILEIN1 is required."
  73.     RETURN 1
  74.     END
  75. IF FileIn2="" THEN DO
  76.     SAY "The notes and activities file was not provided"
  77.     END
  78.  
  79. /* Set the default delimiter to ',' */
  80. Delimiter = ','
  81. SetDefaultDelimiter(Delimiter)
  82.  
  83. /* Set the Header Line and pass it to OmniFile in order to initialize the import. */
  84. /* Literals in REXX have a limit of 250 chars; but can concatenate to make a bigger one */
  85. headerLine1 = 'Business Name, FullName, Address1, Address2, Address3, City, State, Zip, BusPhone, Fax, BusPhoneExt, FaxExt, Job Title, Asst, Informal Name, Result, Codeval, Refby,'
  86.  
  87. headerLine2='u1,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14,u15, HomePhone, HomeExt, HomeAdd1, HomeAdd2, HomeCity, HomeState, HomeZip, Alt1Name, Alt1Title, Alt1Phone, Alt1Ext,'
  88.  
  89. headerLine3='Alt2Name, Alt2Title, Alt2Phone, Alt2Ext, Letter, Owner, Mgr, CountryPhoneCode, CellPhone, Library, First Name, Last Name, Email, EmailServer'
  90.  
  91. headerLine=headerLine1||headerLine2||headerLine3
  92.  
  93. /* For each line in the input file, load the line, load the Rexx variables, modify the Rexx variables, and add the record. */
  94. /* Simultaneously look in the second file to see if there are any notes or activities for this contact */
  95. contactName=''
  96. companyName=''
  97. foundNew=0
  98. IF FileIn2 \='' THEN DO
  99.     DO while LINES(FileIn2)
  100.         line2=LINEIN(FileIn2)
  101.         CALL CHECK_IF_NEW_CONTACT
  102.         IF foundNew=1 THEN LEAVE
  103.         END
  104.     IF (foundNew=0) THEN SAY "No data was found in second file"
  105.     END
  106. DO while LINES(FileIn1)
  107.     line = LINEIN(FileIn1)
  108.     RecType = GetTypeGivenName("Individual")
  109.     SetDefaultType(RecType)
  110.     SetHeaderLine(headerLine)
  111.     SetRexxVariables(line)
  112.     IF separateBusinesses=1 & FullName= "" & BusinessName \= "" THEN DO
  113.         RecType = GetTypeGivenName("Business")
  114.         SetDefaultType(RecType)
  115.         SetHeaderLine(headerLine)
  116.         SetRexxVariables(line)
  117.         inBusiness = 1
  118.         addressFieldNum = BaddressFieldNum
  119.         phoneFieldNum = BphoneFieldNum
  120.         codeFieldNum = BcodeFieldNum
  121.         notesFieldNum = BnotesFieldNum
  122.         END
  123.     ELSE DO
  124.         inBusiness = 0
  125.         addressFieldNum = IaddressFieldNum
  126.         phoneFieldNum = IphoneFieldNum
  127.         codeFieldNum = IcodeFieldNum
  128.         notesFieldNum = InotesFieldNum
  129.         END
  130.     Rec = GetRec(0, RecType)
  131.     SetRecFromRexxVariables()
  132.     CALL CHANGE_REC
  133.     IF (foundNew=1 & contactName=FullName & companyName=BusinessName) THEN CALL GET_REST_OF_INFO
  134.     AddRec()
  135.     END
  136. /* Close all the files. */
  137. result=stream(FileIn1, 'c', 'close')
  138. IF FileIn2 \='' THEN result=stream(FileIn2, 'c', 'close')
  139. RETURN 0
  140.  
  141.  
  142. /* SUBROUTINE */
  143. CHECK_IF_NEW_CONTACT:
  144. /* check to see if at the start of new contact info in the Notes and Activities input file */
  145. foundNew=0
  146. PARSE VAR line2 a "CONTACT:=" .
  147. IF line2 \= a THEN DO
  148.     /* get what comes after the = */
  149.     PARSE VAR line2 . '=' contactName
  150.     IF LINES(FileIn2) THEN line2=LINEIN(FileIn2)
  151.     ELSE RETURN
  152.     PARSE VAR line2 a "COMPANY:=" .
  153.     IF line2 \= a THEN PARSE VAR line2 . '=' companyName
  154.     ELSE RETURN
  155.     foundNew=1
  156.     END
  157. RETURN
  158.  
  159.  
  160. /* SUBROUTINE */
  161. GET_REST_OF_INFO:
  162. IF notes \="" THEN notes=notes||'A'x
  163. /* find NOTES:=; everything between NOTES:= and HISTORY:= is a note*/
  164. DO while LINES(FileIn2)
  165.     line2=LINEIN(FileIn2)
  166.     IF line2 = "NOTES:=" THEN LEAVE
  167.     END
  168. DO while LINES(FileIn2)
  169.     line2=LINEIN(FileIn2)
  170.     IF line2="HISTORY:=" THEN LEAVE
  171.     IF line2 \= "There are no notes for this contact." THEN DO
  172.         IF line2 \= "" THEN notes=notes||line2||'A'x
  173.         ELSE notes=notes||' '||'A'x
  174.         END
  175.     END
  176. IF notes\="" THEN DO
  177.     notes=STRIP(notes, 'T', 'A'x)
  178.     Result=SetField(notesFieldNum, notes, "String", "cur");
  179.     END
  180. /* now find history items; tabs are delimiter within a history item */
  181. DO while LINES(FileIn2)
  182.     line2=LINEIN(FileIn2)
  183.     IF line2="ACTIVITIES:=" THEN LEAVE
  184.     IF line2 \= "You have no history for this contact." & line2\="" THEN DO
  185.         DO j=1 TO 4
  186.             PARSE VAR line2 act.j '9'x line2
  187.             act.j=STRIP(act.j, 'B')
  188.             END
  189.         /* act.1 is date, .2 is time, .3 is type, .4 is summary */
  190.         ActionRec=GetRec(0, actionType, "Temp")
  191.         /* change type to match type in Activities */
  192.         IF act.3='Meeting Held' THEN act.3='Meet'
  193.         ELSE IF act.3='Last Meet' THEN act.3='Meet'
  194.         ELSE IF act.3='Completed Call' THEN act.3='Call'
  195.         ELSE IF act.3='To-do Done' THEN act.3='To-do'
  196.         ELSE IF act.3='Letter Name' THEN act.3='Letter'
  197.         ActionTypeRecNum=ConvertStringToDefineableComboBox(act.3, actionTypeType, 1)
  198.         Result=SetField(actionTypeField, ActionTypeRecNum, "Int", "Temp")
  199.         /* if in history section then action must be completed */
  200.         Result=SetField(actionCompletedField, 1, "Int", "Temp")
  201.         Result=SetField(actionDateField, act.1, "Date", "Temp")
  202.         IF act.2 \= 'None' THEN Result=SetField(actionTimeField, act.2, "Time", "Temp")
  203.         Result=SetField(actionSummaryField, act.4, "String", "Temp")
  204.         Result=SetField(actionFreqField, 1, "Int", "Temp")
  205.         NewRecNum=AddRec(ActionRec, 0, "Temp")
  206.         Result=AddLink(NewRecNum)
  207.         END
  208.     END
  209. DO while LINES(FileIn2)
  210.     line2=LINEIN(FileIn2)
  211.     CALL CHECK_IF_NEW_CONTACT
  212.     IF foundNew=1 THEN LEAVE
  213.     IF line2 \= "There are no activities for this contact." & line2\="" THEN DO
  214.         DO j=1 TO 4
  215.             PARSE VAR line2 act.j '9'x line2
  216.             act.j=STRIP(act.j, 'B')
  217.             END
  218.         /* act.1 is type, .2 is date, .3 is time, .4 is summary */
  219.         ActionRec=GetRec(0,actionType, "Temp")
  220.         ActionTypeRecNum=ConvertStringToDefineableComboBox(act.1, actionTypeType, 1)
  221.         Result=SetField(actionTypeField, ActionTypeRecNum, "Int", "Temp")
  222.         /* if still in Activites section then action is not completed */
  223.         Result=SetField(actionCompletedField, 0, "Int", "Temp")
  224.         Result=SetField(actionDateField, act.2, "Date", "Temp")
  225.         IF act.3 \= 'None' THEN Result=SetField(actionTimeField, act.3, "Time", "Temp")
  226.         Result=SetField(actionSummaryField, act.4, "String", "Temp")
  227.         Result=SetField(actionFreqField, 1, "Int", "Temp")
  228.         NewRecNum=AddRec(ActionRec, 0, "Temp")
  229.         Result=AddLink(NewRecNum)
  230.         END
  231.     END
  232. RETURN
  233.  
  234.  
  235. /* SUBROUTINE */
  236. CHANGE_REC:
  237. /* Need to break FullName into first, middle, last etc.  */
  238. /*Act! only has explicit fields for FirstName and LastName, so we need to get the rest */
  239. IF inBusiness = 0 & FullName \= "" THEN DO
  240.     prefix=""
  241.     middle=""
  242.     suffix=""
  243.     first = 0;
  244.     last = 0;
  245.     /* Parse the full name into words */
  246.     /* Don't alter the FullName value */
  247.     namestr=FullName
  248.     DO j=1 TO 50
  249.         IF namestr='' THEN LEAVE
  250.         PARSE VAR namestr name.j namestr
  251.         name.j=STRIP(name.j, 'B', ',')
  252.         IF name.j = FirstName THEN first=j
  253.         IF name.j = LastName THEN last=j
  254.         END
  255.     numnames=j-1
  256.     IF last=0 THEN last=numnames
  257.     IF first=0 THEN first=1
  258.     DO j=1 TO first-1
  259.         prefix = prefix||name.j||' '
  260.         END
  261.     DO j=(first+1) TO (last-1)
  262.         middle = middle||name.j||' '
  263.         END
  264.     DO j=(last+1) TO numnames
  265.         suffix = suffix||name.j||' '
  266.         END
  267.     prefix=STRIP(prefix, 'B')
  268.     middle=STRIP(middle,'B')
  269.     suffix=STRIP(suffix,'B')
  270.     Result=SetField(prefixFieldNum, prefix, "String", "cur");
  271.     Result=SetField(middleFieldNum, middle, "String", "cur");
  272.     Result=SetField(suffixFieldNum, suffix, "String", "cur");
  273.     END
  274.  
  275. /* Add in addresses if they're not blank */
  276. /* need to make one string out of all the Address strings */
  277. IF Address2 \= "" THEN Address1 = Address1||'A'x||Address2
  278. IF Address3 \= "" THEN Address1 = Address1||'A'x||Address3
  279. IF Address1 \= "" | City \= "" | State \= "" | Zip \= "" THEN DO
  280.     subRec=GetSubRec(addressFieldNum, 0, "cur")
  281.     Result=SetField(addressTypeFieldNum, 2, "Int", "SubRec")
  282.     Result=SetField(addressAddressFieldNum, Address1, "String", "SubRec")
  283.     Result=SetField(addressCityFieldNum, City, "String", "SubRec")
  284.     Result=SetField(addressStateFieldNum, State, "String", "SubRec")
  285.     Result=SetField(addressZipFieldNum, Zip, "String", "SubRec")
  286.     Result=AddRec(subRec, 0, "SubRec")
  287.     END
  288. IF HomeAdd2 \= "" THEN HomeAdd1 = HomeAdd1||'A'x|| HomeAdd2
  289. IF HomeAdd1 \= "" | HomeCity \= "" | HomeState \= "" | HomeZip \= "" THEN DO
  290.     subRec=GetSubRec(addressFieldNum, 0, "cur")
  291.     Result=SetField(addressTypeFieldNum, 1, "Int", "SubRec")
  292.     Result=SetField(addressAddressFieldNum, HomeAdd1, "String", "SubRec")
  293.     Result=SetField(addressCityFieldNum, HomeCity, "String", "SubRec")
  294.     Result=SetField(addressStateFieldNum, HomeState, "String", "SubRec")
  295.     Result=SetField(addressZipFieldNum, HomeZip, "String", "SubRec")
  296.     Result=AddRec(subRec, 0, "SubRec")
  297.     END
  298. IF Email \= "" | EmailServer \= "" THEN DO
  299.     subRec=GetSubRec(addressFieldNum, 0, "cur")
  300.     Result=SetField(addressTypeFieldNum, 4, "Int", "SubRec")
  301.     Result=SetField(addressAddressFieldNum, Email, "String", "SubRec")
  302.     Result=SetField(addressNoteFieldNum, EmailServer, "String", "SubRec")
  303.     Result=AddRec(subRec, 0, "SubRec")
  304.     END
  305.  
  306. /* Add in phones if they're not blank */
  307. /* need to make one string out of all the Address strings */
  308. IF BusPhoneExt \= "" THEN BusPhone = BusPhone||" Ext: "||BusPhoneExt
  309. IF BusPhone \= "" THEN DO
  310.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  311.     Result=SetField(phoneTypeFieldNum, 2, "Int", "SubRec")
  312.     Result=SetField(phonePhoneFieldNum, BusPhone, "String", "SubRec")
  313.     /* put country code in note field; no sense putting it in number since typically need a city code */
  314.     IF CountryPhoneCode \='1' & CountryPhoneCode\='' THEN DO
  315.         CountryPhoneCode = "country code = "||CountryPhoneCode
  316.         Result=SetField(phoneNoteFieldNum, CountryPhoneCode, "String", "SubRec")
  317.         END
  318.     Result=AddRec(subRec, 0, "SubRec")
  319.     END
  320. IF faxExt \= "" THEN Fax = Fax||" Ext: "||faxExt
  321. IF Fax \= "" THEN DO
  322.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  323.     Result=SetField(phoneTypeFieldNum, 6, "Int", "SubRec")
  324.     Result=SetField(phonePhoneFieldNum, Fax, "String", "SubRec")
  325.     Result=AddRec(subRec, 0, "SubRec")
  326.     END
  327. IF HomeExt \= "" THEN HomePhone = HomePhone||" Ext: "||homeExt
  328. IF HomePhone \= "" THEN DO
  329.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  330.     Result=SetField(phoneTypeFieldNum, 1, "Int", "SubRec")
  331.     Result=SetField(phonePhoneFieldNum, HomePhone, "String", "SubRec")
  332.     Result=AddRec(subRec, 0, "SubRec")
  333.     END
  334. /* for the alternate Phone numbers, need to append the title of the alternate person to the Phone note */
  335. IF Alt1Ext \= "" THEN Alt1Phone = Alt1Phone||" Ext: "||Alt1Ext
  336. IF Alt1Title \= "" THEN Alt1Name = Alt1Name||" "||Alt1Title
  337. IF Alt1Phone \= "" | Alt1Name \= "" THEN DO
  338.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  339.     Result=SetField(phoneTypeFieldNum, 2, "Int", "SubRec")
  340.     Result=SetField(phonePhoneFieldNum, Alt1Phone, "String", "SubRec")
  341.     Result=SetField(phoneNoteFieldNum, Alt1Name, "String", "SubRec")
  342.     Result=AddRec(subRec, 0, "SubRec")
  343.     END
  344. IF Alt2Ext \= "" THEN Alt2Phone = Alt2Phone||" Ext: "||Alt2Ext
  345. IF Alt2Title \= "" THEN Alt2Name = Alt2Name||" "||Alt2Title
  346. IF Alt2Phone \= "" | Alt2Name \= "" THEN DO
  347.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  348.     Result=SetField(phoneTypeFieldNum, 2, "Int", "SubRec")
  349.     Result=SetField(phonePhoneFieldNum, Alt2Phone, "String", "SubRec")
  350.     Result=SetField(phoneNoteFieldNum, Alt2Name, "String", "SubRec")
  351.     Result=AddRec(subRec, 0, "SubRec")
  352.     END
  353. IF CellPhone \= "" THEN DO
  354.     subRec=GetSubRec(phoneFieldNum, 0, "cur")
  355.     Result=SetField(phoneTypeFieldNum, 4, "Int", "SubRec")
  356.     Result=SetField(phonePhoneFieldNum, CellPhone, "String", "SubRec")
  357.     Result=AddRec(subRec, 0, "SubRec")
  358.     END
  359.  
  360. /* add in 1 code */
  361. IF Codeval \= "" THEN DO
  362.     subRec=GetSubRec(codeFieldNum, 0, "cur")
  363.     CodeRecNum=ConvertStringToDefineableComboBox(Codeval, codeTypeType, 1)
  364.     Result=SetField(codeTypeField, CodeRecNum, "Int", "SubRec")
  365.     Result=AddRec(subRec, 0, "SubRec")
  366.     END
  367.  
  368. /* add in 2 files; first is a letter, second is a library */
  369. IF Letter \= "" THEN DO
  370.     FileRec=GetRec(0, fileType, "Temp")
  371.     FileTypeRecNum=ConvertStringToDefineableComboBox("Letter", fileTypeType, 1)
  372.     Result=SetField(fileTypeFieldNum, FileTypeRecNum, "Int", "Temp")
  373.     Result=SetField(fileNameFieldNum, Letter, "String", "Temp")
  374.     NewRecNum=AddRec(FileRec, 0, "Temp")
  375.     Result=AddLink(NewRecNum)
  376.     END
  377. IF Library \= "" THEN DO
  378.     FileRec=GetRec(0, fileType, "Temp")
  379.     FileTypeRecNum=ConvertStringToDefineableComboBox("Library", fileTypeType, 1)
  380.     Result=SetField(fileTypeFieldNum, FileTypeRecNum, "Int", "Temp")
  381.     Result=SetField(fileNameFieldNum, Library, "String", "Temp")
  382.     NewRecNum=AddRec(FileRec, 0, "Temp")
  383.     Result=AddLink(NewRecNum)
  384.     END
  385.  
  386. /* the ACT fields that have no correlation to fields in OmniFile are read into the Notes section so the data is not lost */
  387. notes = ""
  388. IF Asst \= "" THEN notes = notes || "Assistant: " || Asst || 'A'x
  389. IF Refby \= "" THEN notes = notes || "Referred by " || Refby || 'A'x
  390. IF useMgrOwner = 1 THEN DO
  391.     IF Mgr \= "" THEN notes = notes || "Manager: " || Mgr || 'A'x
  392.     IF Owner \= "" THEN notes = notes || "Owner: " || Owner || 'A'x
  393.     END
  394. IF u1 \= "" THEN notes = notes || "User field1: " || u1 || 'A'x
  395. IF u2 \= "" THEN notes = notes || "User field2: " || u2 || 'A'x
  396. IF u3 \= "" THEN notes = notes || "User field3: " || u3 || 'A'x
  397. IF u4 \= "" THEN notes = notes || "User field4: " || u4 || 'A'x
  398. IF u5 \= "" THEN notes = notes || "User field5: " || u5 || 'A'x
  399. IF u6 \= "" THEN notes = notes || "User field6: " || u6 || 'A'x
  400. IF u7 \= "" THEN notes = notes || "User field7: " || u7 || 'A'x
  401. IF u8 \= "" THEN notes = notes || "User field8: " || u8 || 'A'x
  402. IF u9 \= "" THEN notes = notes || "User field9: " || u9 || 'A'x
  403. IF u10 \= "" THEN notes = notes || "User field10: " || u10 || 'A'x
  404. IF u11 \= "" THEN notes = notes || "User field11: " || u11 || 'A'x
  405. IF u12 \= "" THEN notes = notes || "User field12: " || u12 || 'A'x
  406. IF u13 \= "" THEN notes = notes || "User field13: " || u13 || 'A'x
  407. IF u14 \= "" THEN notes = notes || "User field14: " || u14 || 'A'x
  408. IF u15 \= "" THEN notes = notes || "User field15: " || u15 || 'A'x
  409. notes=STRIP(notes, 'T', 'A'x)
  410. IF notes \= "" THEN Result=SetField(notesFieldNum, notes, "String", "cur");
  411. RETURN
  412.  
  413.  
  414.