Search This Blog

Tuesday, October 15, 2019

SharePoint online - Get List-item attachments


<%-- The following 4 lines are ASP.NET directives needed when using SharePoint components --%>

<%@ Page Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~masterurl/default.master" Language="C#" %>

<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%-- The markup and script in the following Content element will be placed in the <head> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <script type="text/javascript" src="../Scripts/jquery-1.9.1.min.js"></script>
    <SharePoint:ScriptLink name="sp.js" runat="server" OnDemand="true" LoadAfterUI="true" Localizable="false" />
    <meta name="WebPartPageExpansion" content="full" />

    <!-- Add your CSS styles to the following file -->
    <link rel="Stylesheet" type="text/css" href="../Content/App.css" />

    <!-- Add your JavaScript to the following file -->
    <script type="text/javascript" src="../Scripts/App.js"></script>
</asp:Content>

<%-- The markup in the following Content element will be placed in the TitleArea of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">
    Page Title
</asp:Content>

<%-- The markup and script in the following Content element will be placed in the <body> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <div id="myDiv"></div>
    <div>
        <p id="message">
            <!-- The following content will be replaced with the user name when you run the app - see App.js -->         
        </p>
    </div>


</asp:Content>
app.js
-------------


var Items = null;
'use strict';
var listItems;
var hostweburl = decodeURIComponent(getQueryStringParameter('SPHostUrl'));
var appweburl = decodeURIComponent(getQueryStringParameter('SPAppWebUrl'));
$(document).ready(function () {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', ListItems)
});

function ListItems() {
    var context = new SP.ClientContext(appweburl);
    var ContextSite = new SP.AppContextSite(context, hostweburl);
    var web = ContextSite.get_web();
    context.load(web);
    var list = web.get_lists().getByTitle('TestList');
    var caml = new SP.CamlQuery();
    caml.set_viewXml("<View><Query><FieldRef Name='Title' /></Query></View>"); // U can change the query for getting desired result  
    //Items = list.getItems(caml);
    //context.load(Items);
    //context.executeQueryAsync(onSucceededCallback, onFailedCallback);

    Items = list.getItems(SP.CamlQuery.createAllItemsQuery());
    context.load(Items, 'Include(AttachmentFiles)'); //Note: AttachmentFiles is requested explicitly
    context.executeQueryAsync(onSucceededCallback, onFailedCallback);
}

function onSucceededCallback(sender, args) {
    var enumerator = Items.getEnumerator();
    var myText = '';
    for (var i = 0; i < Items.get_count() ; i++) {
        var item = Items.getItemAtIndex(i);

        //print attachments
        var attachments = item.get_attachmentFiles();
        for (var j = 0; j < attachments.get_count() ; j++) {
            var attachment = attachments.getItemAtIndex(j);
          
            var img = new Image(150, 150);
            img.src = attachment.get_serverRelativeUrl();
            myDiv.appendChild(img);

            myText += attachment.get_serverRelativeUrl();
            console.log(attachment.get_serverRelativeUrl());
        }
    }
  
    //while (enumerator.moveNext()) {
    //    var listItem = enumerator.get_current();
    //   // myText += 'Title: ' + listItem.get_item('Title') + '<br>';
    //   // myText += 'ID: ' + listItem.get_id() + '<br><br>';
    //}
   // myDiv.innerHTML = myText;
}

function onFailedCallback(sender, args) {
    var myText = '<p>The request failed: <br>';
    myText += 'Message: ' + args.get_message() + '<br>';
    myDiv.innerHTML = myText;
}

function getQueryStringParameter(paramToRetrieve) {
    var params = document.URL.split("?")[1].split("&");
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve) return singleParam[1];
    }
}

Sunday, October 6, 2019

SampleWebService url & Method - Get Dynamically and Add reference programmatic


Download

using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Reflection;
using System.Security.Permissions;
using System.ServiceModel;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Xml;
using System.Xml.Serialization;

namespace SPWebServiceConnect
{
    class Program
    {


        [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]

        static void Main()
        {
        
            var asmxurl = ConfigurationManager.AppSettings["ASMXServiceUrl"];
            try
            {
                //  http://secure.smartbearsoftware.com/samples/testcomplete14/webservices/Service.asmx?op=HelloWorld
                object dataHlowrd = WsProxy.CallWebService(asmxurl, "SampleWebService", "HelloWorld", null);
                object curnttimeData = WsProxy.CallWebService(asmxurl, "SampleWebService", "GetCurrentTime", null);
                Console.WriteLine(dataHlowrd);
                Console.WriteLine(curnttimeData);
            }
            catch (Exception ex)
            {
                //  not available at all, for some reason
                Console.Write(string.Format("{0} unavailable: {1}", ex.StackTrace, ex.Message));
            }
            Console.Read();
        }

    }
    internal class WsProxy
    {
        [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
        internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
        {

            System.Net.WebClient client = new System.Net.WebClient();
            // Connect To the web service

            System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl");

            // Now read the WSDL file describing a service.

            ServiceDescription description = ServiceDescription.Read(stream);

            ///// LOAD THE DOM /////////

            // Initialize a service description importer.

            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();

            importer.ProtocolName = "Soap12"; // Use SOAP 1.2.

            importer.AddServiceDescription(description, null, null);

            // Generate a proxy client.

            importer.Style = ServiceDescriptionImportStyle.Client;

            // Generate properties to represent primitive values.

            importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;

            // Initialize a Code-DOM tree into which we will import the service.

            CodeNamespace nmspace = new CodeNamespace();

            CodeCompileUnit unit1 = new CodeCompileUnit();

            unit1.Namespaces.Add(nmspace);

            // Import the service into the Code-DOM tree. This creates proxy code that uses the service.

            ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);

            if (warning == 0) // If zero then we are good to go
            {

                // Generate the proxy code

                CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");

                // Compile the assembly proxy with the appropriate references

                string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };

                CompilerParameters parms = new CompilerParameters(assemblyReferences);

                CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

                // Check For Errors

                if (results.Errors.Count > 0)
                {

                    foreach (CompilerError oops in results.Errors)
                    {

                        System.Diagnostics.Debug.WriteLine("========Compiler error============");

                        System.Diagnostics.Debug.WriteLine(oops.ErrorText);
                    }

                    throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
                }
                // Finally, Invoke the web service method

                object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);

                MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);

                return mi.Invoke(wsvcClass, args);
            }

            else
            {
                return null;
            }
        }
    }
}