MS Outlook和OLE2

2020-09-10 17:30发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我使用Outlook将电子邮件中的主题读入内部表中,并且工作正常!

最后,还有2个问题,我希望有人能帮助我:

1)我需要知道标准收件箱中的电子邮件数量。

2)我想将电子邮件从Standort-Inbox移到名为" NEW"的子文件夹中。

Microsoft说,Outlook具有" Count-"和" Move-Methods"。 但是如何在ABAP中使用这种方法?

最诚挚的问候,

马丁

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我使用Outlook将电子邮件中的主题读入内部表中,并且工作正常!

最后,还有2个问题,我希望有人能帮助我:

1)我需要知道标准收件箱中的电子邮件数量。

2)我想将电子邮件从Standort-Inbox移到名为" NEW"的子文件夹中。

Microsoft说,Outlook具有" Count-"和" Move-Methods"。 但是如何在ABAP中使用这种方法?

最诚挚的问候,

马丁

付费偷看设置
发送
6条回答
骆驼绵羊
1楼 · 2020-09-10 17:39.采纳回答

这是您的VBA代码和ABAP代码之间的等效项:

 Sub MoveItems()FORM moveitems。

     将OutlookApp调暗为Outlook.Application数据outlookapp类型ole2_object。
     将myNamespace设置为Outlook.NameSpace DATA mynamespace TYPE ole2_object。
     将myFolder设置为Outlook.MAPIFolder DATA myfolder TYPE ole2_object。
     Dim destFolder作为Outlook.MAPIFolder DATA destfolder TYPE ole2_object。
     Dim count As Long,n作为Long DATA count TYPE i。
     将movItems设置为Outlook.Items DATA movitems类型ole2_object。
     Dim mItem作为对象DATA模式ole2_object。

     设置OutlookApp =新的CREATE OBJECT outlookapp
 Outlook.Application'Outlook.Application'。

     设置myNamespace = Outlookapp的调用方法'GetNameSpace'=
 OutlookApp.GetNamespace(" MAPI")mynamespace导出#1 ='MAPI'。

     设置myFolder =调用mynamespace的方法
 myNamespace.GetDefaultFolder(6)''GetDefaultFolder'= myfolder导出#1
 默认收件箱= 6。

     设置destFolder = myfolder的调用方法'Folders'=
 myFolder.Folders(" NEW")'destfolder导出#1的子文件夹='NEW'。
 默认收件箱

     设置movItems = myFolder.Items获取myfolder'Items'= movitems的属性。

     count = movItems.count获取movitems的属性'Count'=计数。

     对于n = count To 1 Step-1,请计算TIMES。

         movItems(n)。移动destFolder myfolder'Items'= mitem的调用方法
                                                导出#1 = sy-index。
 
模仿"移动"导出#1的呼叫方法 =解除文件夹。 下一个ENDDO。 结束子ENDFORM。
lukcy2020
2楼-- · 2020-09-10 17:50

对不起,我的错。

这是我在ABAP中需要的代码(在VBA中可以正常工作,早期绑定):

子MoveItems()
     将OutlookApp调暗为Outlook.Application
     设置OutlookApp =新的Outlook.Application
     将myNamespace调暗为Outlook.NameSpace
     设置myNamespace = OutlookApp.GetNamespace(" MAPI")
     将myFolder调暗为Outlook.MAPIFolder
     Dim destFolder作为Outlook.MAPIFolder
     昏暗计数长,n长
     将movItems设置为Outlook.Items
     Dim mItem作为对象
    
 '源文件夹和目标文件夹的定义
     设置myFolder = myNamespace.GetDefaultFolder(6)'默认收件箱
     设置destFolder = myFolder.Folders(" NEW")'默认收件箱的子文件夹

     设置movItems = myFolder.Items
    
     计数= movItems.count
     对于n =计数到1步骤-1
         movItems(n)。移动destFolder
     下一个
 结束子
 
clever101
3楼-- · 2020-09-10 17:57

我自己找到了。 这是我的解决方案,现在必须将其集成到我的主程序中:

 REPORT Z_TEST2。

 包括:ole2incl。
 类型:BEGIN OF type_email,
           mailsen TYPE c LENGTH 1024," +电子邮件弃权者
           mailhdc TYPE c LENGTH 1024," +电子邮件标题komplett inkl。票证编号和Timestemp
           mailhdr TYPE c长度2048," +电子邮件标题原始(原始)
           maildat TYPE字符串," +电子邮件数据"
           mailtim TYPE字符串," +电子邮件通知"
           mailjah TYPE c LENGTH 4," +电子邮件Jahr
         END OF type_email。
 * ###############################################  #############################
 数据:l_oleoutlook TYPE ole2_object,
       l_olenmspace TYPE ole2_object,
       l_oleeingang TYPE ole2_object," + Posteingang
       l_olemainpth TYPE ole2_object," + Zielordner
       l_oleemail01 TYPE ole2_object," +电子邮件
       l_oledtarget TYPE ole2_object,
       l_hdrrawvers TYPE C LENGTH 2048," +标头RAW(原始)
       l_laengeabs1 TYPE i," +遗弃者姓氏(列尔Datensätzefestzustellen)
       l_dszaehler1 TYPE sy-tabix," +Zählerfürdie电子邮件
       l_origdatum1 TYPE字符串," +原始数据aus电子邮件
       l_pfadmailcp TYPE字符串," +保留Windows-Verzeichnisfürdie gespeicherten电子邮件
       l_sendername TYPE字符串," +弃权者电子邮件
       l_hdrcomplet TYPE字符串," +页眉"。票证编号和时间戳
       l_timestamp1 TYPE字符串," +时间戳"
       l_sendreceiv TYPE i。  " +标志,ob" R"(电子邮件Eingang)或" S"(Gesendete电子邮件)ausgelesen werden soll

 * + Variablen(符合Erstellung时间戳):

 数据:l_emaildatum TYPE字符串," +数据表Tabelle it_emails
       l_emailuhrze TYPE字符串," +在Internet上进行的合并it_emails
       l_tempjahr01 TYPE C LENGTH 4," + Jahr
       l_tempmonat1 TYPE C LENGTH 2," + Monat
       l_temptag001 TYPE C LENGTH 2," +标记"
       l_tempstunde TYPE c LENGTH 2," +刚度"
       l_tempminute TYPE c LENGTH 2," +分钟
       l_tempsekund TYPE c长度2。" + Sekunde

 数据:type_email的lit_emails TYPE STANDARD TABLE,
       w_lit_emails TYPE类型的电子邮件。
 * ###############################################  #############################

 " + Wird nur zu Testzweckenbenötigt:
 ******************************************************  **********
 参数:p_pronum TYPE字符串义务。  " + Projekt-Nr。
 参数:p_sndrec类型c默认'R'强制性。  " + Eingang/Gesendet
 ******************************************************  **********
 选择开始。
 将p_sndrec转换为大写。

 如果p_sndrec NE'R'和p_sndrec NE'S'。
   信息" RfürErhalten oder SfürGesendet eingeben" TYPE" E"。
 万一。

 如果p_sndrec EQ为'R'。
   l_sendreceiv = 6。
 其他。
   l_sendreceiv = 5。
 万一。

 刷新lit_emails。

 创建对象l_oleoutlook'Outlook.Application'。
 l_oleoutlook'GetNameSpace'= l_olenmspace的调用方法
   出口
     #1 ='MAPI'。
 l_olenmspace'GetDefaultFolder'= l_oleeingang的调用方法
   出口
     #1 = l_sendreceiv。  " 3:已删除邮件-4:发件箱-5:已发送邮件-6:收件箱-9:日历-10:联系人-11:日志-12:注释-13:任务
 l_olenmspace'文件夹'的调用方法= l_olemainpth
   出口
     #1 ='PersönlicherOrdner'。
 l_olemainpth'文件夹'的调用方法= l_oledtarget
   出口
     #1 ='_Tickets'。

 ULINE。
 清除:l_dszaehler1。

 做。
   l_dszaehler1 = l_dszaehler1 + 1。
   l_oleeingang'项目'的呼叫方法= l_oleemail01" + Zugriff auf电子邮件编号l_dszaehler1
     出口
       #1 = l_dszaehler1。

     如果sy-subrc = 0。
       获取l_oleemail01'SenderName'= l_sendername的属性。  " +弃权者
       CONDENSE l_sendername。
       将Strlen(l_sendername)移动到l_laengeabs1。
         如果l_laengeabs1 NE 0。
           如果p_sndrec EQ为'R'。
             获取l_oleemail01'ReceivedTime'= l_origdatum1的属性。  " + Datum + Zeit Empfang
           其他。
             获取l_oleemail01'SentOn'的属性= l_origdatum1。  " + Datum + Zeit Gesendet
           万一。

           获取l_oleemail01'Subject'= l_hdrrawvers的属性。  " + Betreff

           在空间中将l_origdatum1拆分为l_emaildatum l_emailuhrze。
           l_tempjahr01 = l_emaildatum + 6(4)。
           l_tempmonat1 = l_emaildatum + 3(2)。
           l_temptag001 = l_emaildatum(2)。
           l_tempstunde = l_emailuhrze(2)。
           l_tempminute = l_emailuhrze + 3(2)。
           l_tempsekund = l_emailuhrze + 6(2)。
           浓缩:l_hdrrawvers。
           合并l_tempjahr01 l_tempmonat1 l_temptag001 l_tempstunde l_tempminute l_tempsekund'+'到l_timestamp1。
           连接p_pronum'+'l_timestamp1 l_hdrrawvers INTO l_hdrcomplet。
 ** [Speichern der E-Mail als Datei:]
           将l_hdrcomplet中':'的所有出现替换为'_'。
           用l -hdrcomplet替换'/'的所有出现。
           用l + h替换l_hdrcomplet中所有'&'事件。
           用l替换l_hdrcomplet中所有'"'的事件。
           将l_hdrcomplet中所有'\'的事件替换为'-'。
           用l + h替换l_hdrcomplet中所有'*'事件。
           替换所有出现的"?" 在带有" +"的l_hdrcomplet中。
           将l_hdrcomplet中所有'<'出现的地方替换为'_'。
           替换所有出现的" |" 在带有"-"的l_hdrcomplet中。
           将l_hdrcomplet中所有'>'事件替换为'_'。

           CONCATENATE'U:/Tickets/Mails/'l_hdrcomplet'.mht'INTO l_pfadmailcp。  " + Verzeichnis,请发送电子邮件给außerhalbvon Outlook
            " + gespeichert werden脚
           l_oleemail01'SAVEAS'的呼叫方法
             出口
               #1 = l_pfadmailcp
               #2 = 10。

 * **Füllender internen Tabelle:
           浓缩:l_emaildatum,l_emailuhrze。
           w_lit_emails-mailsen = l_sendername。
           w_lit_emails-maildat = l_emaildatum。
           w_lit_emails-mailtim = l_emailuhrze。
           w_lit_emails-mailjah = l_tempjahr01。
           w_lit_emails-mailhdc = l_hdrcomplet。
           w_lit_emails-mailhdr = l_hdrrawvers。
           APPEND w_lit_emails至lit_emails。
           免费对象l_oleemail01。
         万一。
       其他。
         出口。
     万一。

   清除:w_lit_emails,l_emailuhrze,l_emaildatum,l_pfadmailcp,l_hdrrawvers,l_laengeabs1,l_sendername。
   清除:l_hdrcomplet,l_origdatum1,l_tempjahr01,l_tempmonat1,l_temptag001,l_tempstunde,l_tempminute,l_tempsekund。

 ENDDO。

 ULINE。
 清除l_dszaehler1。

 * Ergebnisse aus interner Tabelle ausgeben:

 环聊lit_emails INTO w_lit_emails。
   l_dszaehler1 = l_dszaehler1 + 1。
   写:/w_lit_emails-maildat,w_lit_emails-mailtim,w_lit_emails-mailsen,w_lit_emails-mailhdr,w_lit_emails-mailhdc。
   l_oleeingang'项目'的呼叫方法= l_oleemail01" + Zugriff auf电子邮件编号l_dszaehler1
     出口
       #1 = l_dszaehler1。
   l_oleemail01"移动"的呼叫方法
     出口
       #1 = l_oledtarget。

     如果sy-subrc EQ 0。
       l_dszaehler1 = l_dszaehler1-1。
     万一。

   清除w_lit_emails。
   免费对象l_oleemail01。
 结局。

 免费对象l_oleoutlook。
 免费对象l_olenmspace。
 免费对象l_oleeingang。
 免费对象l_olemainpth。
 免费对象l_oledtarget。
 
暮风yp
4楼-- · 2020-09-10 17:39

为什么不首先创建并测试所需的VBA代码? 然后我可以将其翻译为工作版本? 使用上面的代码,也许生成的ABAP不会包括您需要的所有VBA到ABAP转换规则。 或者,如果您愿意,可以按照我在这里提供的建议自己进行转换: https://answers.sap.com/questions/287201/como-eliminar-filas-vacias-en-ole-abap.html

黑丝骑士
5楼-- · 2020-09-10 17:46

亲爱的 桑德拉,

感谢您的耐心;-)我已经在上面修改了代码。

空代码
6楼-- · 2020-09-10 18:00
Martin Grischkat :我猜它必须是"物品",而不是"附件":
调用附件的方法'物品'=附件导出#1 = y。

一周热门 更多>