Example: Populate a ListView with a list of attachments using EWS


I thought it would be fun to blog another sample of getting a list of attachments using EWS.  So, here is a handly method for populating a list of attachments.


 


    // —————————————————————————————–


    // GetFileAttachmentsListLv


    //   Sets a listview to the attachments on an item.


    //   Returns number of attachments.


    // —————————————————————————————–


    public static int GetFileAttachmentsListLv(ExchangeServiceBinding binding, ItemIdType id, ref ListView oListView)


    {


        int iAttachmentCount = 0;


        //List<RequestAttachmentIdType> attachmentIds = new List<RequestAttachmentIdType>();


 


        GetItemType getItemRequest = new GetItemType();


        getItemRequest.ItemIds = new ItemIdType[] { id };


        getItemRequest.ItemShape = new ItemResponseShapeType();


 


        getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;


        PathToUnindexedFieldType hasAttachPath = new PathToUnindexedFieldType();


        hasAttachPath.FieldURI = UnindexedFieldURIType.itemHasAttachments;


        PathToUnindexedFieldType attachmentsPath = new PathToUnindexedFieldType();


        attachmentsPath.FieldURI = UnindexedFieldURIType.itemAttachments;


        // Add  additional properties…?


 


        getItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[]{


             hasAttachPath, attachmentsPath };


 


        GetItemResponseType getItemResponse = binding.GetItem(getItemRequest);


        ItemInfoResponseMessageType getItemResponseMessage = getItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;


 


        oListView.Clear();


        oListView.View = View.Details;   // Set the view to show details.


        oListView.GridLines = true;      // Display grid lines.


        oListView.Columns.Add(“Name”, 90, HorizontalAlignment.Left);


        oListView.Columns.Add(“Id”, 120, HorizontalAlignment.Left);


        oListView.Columns.Add(“RootItemId”, 120, HorizontalAlignment.Left);


        oListView.Columns.Add(“RootItemChangeKey”, 120, HorizontalAlignment.Left);


        oListView.Columns.Add(“ContentType”, 80, HorizontalAlignment.Left);


        oListView.Columns.Add(“ContentId”, 80, HorizontalAlignment.Left);


        oListView.Columns.Add(“ContentLocation”, 80, HorizontalAlignment.Left);


 


        if (getItemResponseMessage.ResponseCode == ResponseCodeType.NoError)


        {


 


            ItemType item = getItemResponseMessage.Items.Items[0];


            // dont rely on item.HasAttachments – its mostly likely not set as you would think.


            if ((item.Attachments != null) && (item.Attachments.Length > 0))


            {


                for (int attachmentIndex = 0; attachmentIndex < item.Attachments.Length; attachmentIndex++)


                {


                    // For now, let’s only consider file attachments instead of item attachments.


                    FileAttachmentType almostAnAttachment = item.Attachments[attachmentIndex] as FileAttachmentType;


                    if (almostAnAttachment != null)


                    {


                        // Note: Use GetAttachment to get the actual attachment.


 


                        RequestAttachmentIdType requestId = new RequestAttachmentIdType();


                        requestId.Id = almostAnAttachment.AttachmentId.Id;


 


                        ListViewItem lvItem = new ListViewItem(String.Format(“{0}”, almostAnAttachment.Name));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.AttachmentId.Id));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.AttachmentId.RootItemId));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.AttachmentId.RootItemChangeKey));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.ContentId));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.ContentLocation));


                        lvItem.SubItems.Add(String.Format(“{0}”, almostAnAttachment.ContentType));


                        oListView.Items.Add(lvItem);


 


                        lvItem = null;


 


                        iAttachmentCount++;


                    }


                }


 


            }


 


        }


 


        return iAttachmentCount;


    }

Skip to main content