SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Bilder aus Bildbibliotheken per E-Mail Anhang versenden

Unbeantwortet Dieser Beitrag hat 11 Antworten

Ohne Rang
46 Beiträge
Tobias Breit erstellt 16 März 2012 15:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,

ich habe folgende Anforderung:

Aus einer Bildbibliothek soll es möglich sein, ein Bild per E-Mail Anhang zu versenden. Dieses soll nach dem Ausfüllen der Informationen Empfänger und Nachricht über den Exchange-Server versendet werden, mit dem ausgewählten Bild als Attachement. Nach der Integration in das Kontextmenü wird durch einen Klick auf die Schaltfläche eine ASP Seite angesteuert, welche Textboxen bereitstellt. Durch einen Klick auf den Button "Senden" wird anschließend mein Code ausgeführt.

Diese Anforderung hatte ich bereits in der Vergangenheit mal erfolgreich umgesetzt für Dokumentenbibliotheken und Listen.

Folgenden Codeverwende ich:

Protected Sub btnSend_Click(sender As System.Object, e As System.EventArgs) Handles btnSend.Click
            EnsureChildControls()

            Dim listId As Guid = New Guid(Server.UrlDecode(Request.QueryString("ListId")))
            Dim itemId As Integer = Integer.Parse(Request.QueryString("ID"))

            Dim web As SPWeb = SPContext.Current.Web
            Dim item As SPListItem = web.Lists(listId).GetItemById(itemId)
  
            Dim senderMail As String = SPContext.Current.Web.CurrentUser.Email
            Dim recipientMail As String = txtSendTo.Text
            Dim message As MailMessage = New MailMessage(senderMail, recipientMail)
            message.Body = txtMessage.Text
            message.Subject = item.DisplayName
         
            Dim file As SPFile = item.File
            Dim attachment As Attachment = New Attachment(file.OpenBinaryStream(), file.Name)
            message.Attachments.Add(attachment)
         
            Dim mailServer As String = Site.WebApplication.OutboundMailServiceInstance.Server.Address.ToString
            Dim smtp As SmtpClient = New SmtpClient(mailServer)
            smtp.UseDefaultCredentials = True
            smtp.Send(message)

            ClosePopUp()
        End Sub

        Protected Sub ClosePopUp()
            Me.Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>")
            Me.Context.Response.Flush()
            Me.Context.Response.End()
        End Sub


Meine elements.xml sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction Title="Als E-Mail-Anhang versenden"
              Description="Versendet das ausgewählte Bild als E-Mail Anhang."
              Id="Microsoft.SharePoint.StandardMenu.ActionsMenu.SendAsEmail"
              RegistrationType="List"
              RegistrationId="109"
              GroupId="ActionsMenu"
              ImageUrl="/_layouts/images/SendAsMail/MSG32.GIF"
              Location="Microsoft.SharePoint.StandardMenu"
              Sequence="1000">
    <UrlAction Url="javascript:OpenPopUpPageWithTitle('{SiteUrl}/_layouts/SendAsMail.aspx?ListId={ListId}&amp;ID={ItemId}', RefreshOnDialogClose, 450, 290,'Als E-Mail-Anhang versenden')" />
  </CustomAction>
</Elements>

Jetzt habe ich aber das Problem, das ich beim Debuggen eine Fehlemeldung bekommen.

Dim itemId As Integer = Integer.Parse(Request.QueryString("ID"))

>> Input string was not in a correct format. <<

Bei Dokumentenbibliotheken hat das Problemlos so funktioniert.

Jemand eine Idee wo der Fehler sein könnte?

 

Vielen Dank schonmal und Gruß

Tobias Breit


Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 März 2012 16:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das funktioniert nicht, weil es bei Bildbibliotheken kein Ribbon gibt und Du deshalb den Button ins Actions-Menü gepackt hast. Dort ist aber {ItemId} nicht belegt und daher der Fehler. Du könntest es höchstens über das ECB (konetxtmenü der Elemente) versuchen, aber dazu muß die Ansicht der Bildbibliothek eine normale Listenansicht sein.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
46 Beiträge
Tobias Breit Als Antwort am 16 März 2012 16:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die schnelle Antwort.

Ja genau das war/ist mein Problem, das es eben keinen Ribbon gibt. Ins ECB darfs/solls leider nicht, da die Standard Ansicht verwendet werden soll.

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 17 März 2012 13:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

also ich habs grad bei meiner EntwicklerVM getestet, und da hab ich in dem View "All Pictures" die Möglichkeit per Code einen eigenen Ribbon-Tab inkl. Controls zu erzeugen.

Ich hab mich erst letzte Woche mit dem Thema "Ribbon dynamisch erzeugen" beschäftigt und dabei ist ein Feature rausgekommen das in dem Fall für Testzwecke vielleicht hilfreich wäre. Ist allerdings noch in der Betaphase, also ... naja... eh schon wissen ;)

http://swcustomribbon.stefan-walter.net

UPDATE:
Ich habs mal ausprobiert, und bekomme mittels JavaScript alle markierten Items heraus - also der Ansatz funktioniert (wenn auch nicht mit {ItemId}). Meine Solution ist noch nicht auf CodePlex, aber für das Verständnis sollte es reichen wenn du dir die dort vorhandene API zum erzeugen des Ribbons anschaust: http://spribbon.codeplex.com/

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 März 2012 08:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist doch mal eine gute Idee. Wenn Microsoft kein Ribbon für Bildbibliotheken bereitstellt, erzeugt man sich eben selbst eines. Muß ich bei Gelegenheit auch mal testen...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
46 Beiträge
Tobias Breit Als Antwort am 19 März 2012 18:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Stefan Walter"]

UPDATE:
Ich habs mal ausprobiert, und bekomme mittels JavaScript alle markierten Items heraus - also der Ansatz funktioniert (wenn auch nicht mit {ItemId}). Meine Solution ist noch nicht auf CodePlex, aber für das Verständnis sollte es reichen wenn du dir die dort vorhandene API zum erzeugen des Ribbons anschaust: http://spribbon.codeplex.com/

[/quote]

Hast du zufällig dein JavaScript griffbereit?

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 19 März 2012 19:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bitte sehr:                       

                                            @"javascript:function getItemIds()
                                            {
                                                var itemIds = '';
                                                var items = SP.ListOperation.Selection.getSelectedItems();
                                                var item;
                                                for(var i in items)
                                                {
                                                item = items[i];
                                                if(itemIds != '')
                                                {
                                                    itemIds = itemIds + ',';
                                                }
                                                itemIds = itemIds + item.id;
                                                }
                                                return itemIds;
                                            };alert(getItemIds());"

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
46 Beiträge
Tobias Breit Als Antwort am 20 März 2012 12:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Erstma danke Stefan für das Script.

Meins war so in etwa auch aufgebaut, gibt aber nix aus leider. :(

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 20 März 2012 13:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hm.. naja, wir könnten gerne mal eine kurze Teamviewer Session machen und ich werf nen Blick drauf, vielleicht finden wir ja zu 2t das Problem. Allerdings könnte ich erst Abends (ab ~21:00) da ich bis dahin (ohne Headset) auf der Uni bin. Bzw. irgendwann morgen nachmittag würde bei mir auch gehen. Bei Interesse melde dich einfach kurz per Skype (Nick: sorosur).

Hier findest du meinen Sourcecode:

http://www.stefan-walter.net/?wpdmact=process&did=MTIuaG90bGluaw==
Damit sich der Beta-Code nicht verselbstständigt habe ich ein Passwort für den Download gesetzt: "SharePointCommunity"

Versuchs mal damit, nur um zu sehen obs prinzipiell bei deinem Setting ein Problem gibt, oder ob es an der Umsetzung an sich liegt. Allerdings musst du noch das JavaScript anpassen: In dem File "SWCustomRibbon\ControlTemplates\SWCustomRibbon\usrRibbon.ascx.cs" in Zeile 117 "CommandJavaScript" mit dem Script setzen. (Ich würds ja schnell selbst machen, hab hier aber kein Studio zur Verfügung.)

- Source noch einmal Builden
- Feature Installieren
- Site Settings setzen (Neuen Button erstellen, URL für Bild + Action leer lassen)
- Speichern + auf die Bibliothek wechseln
- Bilder anhackerln und auf den Button klicken

Dann sollte das Popup mit den ItemIDs kommen. Wenn das nicht klappt wirds spannend...

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
46 Beiträge
Tobias Breit Als Antwort am 20 März 2012 17:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Erstmal vielen herzlichen Dank für diene Unterstützung Stefan! (und auch an Andi!)

Habe es jetzt ohne Ribbon über das Action-Menu gelöst.

Das ganze sieht wie folgt aus:

Eine weitere elements.xml hinzugefügt mit folgendem Inhalt:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction ScriptSrc="/_layouts/SendAsMail/SendMail.js" Location="ScriptLink" xmlns="http://schemas.microsoft.com/sharepoint/"></CustomAction>
</Elements>

 

Die alte elements.xml angepasst:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction ScriptSrc="/_layouts/SendAsMail/SendAsMail.js" Location="ScriptLink" xmlns="http://schemas.microsoft.com/sharepoint/">
  </CustomAction>
  <CustomAction Title="Als E-Mail-Anhang versenden"
               Description="Versendet das ausgewählte Bild als E-Mail Anhang"
               Id="SendAsEmail"
               RegistrationType="List"
               RegistrationId="109"
               Location="Microsoft.SharePoint.StandardMenu"
               GroupId="ActionsMenu"
               ImageUrl="/_layouts/images/SendAsMail/MSG32.GIF"
               Sequence="1000">
    <UrlAction Url ="javascript:SendAsMail();" />
  </CustomAction>
</Elements>

 

 

Das entsprechende Javascript (Code teilweise aus \...\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\IMGLIB.JS):

/// <reference name="MicrosoftAjax.js" />
/// <reference path="file://C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/14/TEMPLATE/LAYOUTS/SP.UI.Dialog.debug" />
/// <reference path="file://C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/14/TEMPLATE/LAYOUTS/SP.core.debug.js" />
/// <reference path="file://C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/14/TEMPLATE/LAYOUTS/SP.debug.js" />


function ULSjYp() {
    var o = new Object;
    o.ULSTeamName = "Microsoft SharePoint Foundation";
    o.ULSFileName = "imglib.js";
    return o;
}

function SendAsMail() {
    ULSjYp: ;
    if (!browseris.ie || !browseris.win) {
        alert(L_IEOnlyFeature_Text);
        return
    }
    if (!fImglibDefautlView) {
        alert(L_NotOurView_Text);
        return
    } if (tbPreview == null) {
        alert(L_NotAvailableOnWebPart_Text);
        return
    }
    var b = MakeSelectionStr();
    if (b == "") {
        alert(L_NoImageSelected_Text);
        return
    }
    var a = GetLayoutUrl() + "SendAsMail/SendAsMail2.aspx?List=" + vCurrentListID + "&SelectedIds=" + b, c = GetUrlKeyValue("RootFolder", true);
    if (c != "") a += "&RootFolder=" + c;
    //    window.location.href = a
    var options = {
        title: "Als E-Mail versenden",
        url: a
    };
     SP.UI.ModalDialog.showModalDialog(options);
}

function GetLayoutUrl() {
    ULSjYp: ;
    if (vCurrentWebUrl != "") return vCurrentWebUrl + "/_layouts/";
    return "../../_layouts/"
}

Und den Code-Behind der ASP-Seite angepasst:

..........

        Dim ListId As Guid = New Guid(Request.QueryString("List"))
        Dim ItemId As Integer = Integer.Parse(Request.QueryString("SelectedIds"))

...........

 

Funktioniert so, zwar erst nur mit einem Bild (Anforderung entsprechend),  aber klappt :)

 

 

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 21 März 2012 00:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Super, hauptsache du hast ne Lösung gefunden! Und danke fürs posten der selbigen - vielleicht kanns ja noch wer brauchen :)

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
46 Beiträge
Tobias Breit Als Antwort am 19 März 2012 09:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hmm cool werd ich gleich mal ausprobieren. Vielen Dank schonma :)