1

私はasp.net Webアプリケーションを開発しています。私は、lists.asmx Web サービスを介して SharePoint リスト データにアクセスしています。同様に、lists.asmx を介して SharePoint リストにデータを追加しています。新しいリスト項目を追加する私のコードは次のとおりです

public void InsertDataInClientList(Client clientObj)
        {
            PBSWebApplication.LocalHostServiceReference.ListsSoapClient proxy = Utility.GetLocalProxy();

            try
            {

                XmlDocument doc = new XmlDocument();
                XmlElement batch = doc.CreateElement("Batch");

                batch.InnerXml = "<Method ID='1' Cmd='New'>"
                    + "<Field Name='FirstName'>" + clientObj.FirstNameOfIndividual + "</Field>"
                    + "<Field Name='Last_x0020_Name'>" + clientObj.LastNameOfIndividual + "</Field>"
                    + "<Field Name='PATIENT_x0020_DOB'>" + clientObj.DateOfBirth.ToString("yyyy-MM-dd") + "</Field>"
                    + "<Field Name='Age'>" + clientObj.Age + "</Field>"    
                    + "<Field Name='Gender'>" + clientObj.Gender + "</Field>"
                    + "<Field Name='Preferred_x0020_By'>" + clientObj.ReferredBy + "</Field>"
                    + "<Field Name='Parent_x002f_Caregiver_x0020_Fir'>" + clientObj.Parent1FirstName + "</Field>"
                    + "<Field Name='Parent_x002f_Caregiver_x0020_Las'>" + clientObj.Parent1LastName + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Street_x002'>" + clientObj.Parent1StreetAddress + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_City'>" + clientObj.Parent1City + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_State'>" + clientObj.Parent1State + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Zip'>" + clientObj.Parent1Zip + "</Field>"                    
                    + "<Field Name='Parent_x0020_1_x0020_Home_x0020_'>" + clientObj.Parent1HomePhone + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Work_x0020_'>" + clientObj.Parent1WorkPhone + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Mobile_x002'>" + clientObj.Parent1MobilePhone + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Mobile_x002'>" + clientObj.Parent1MobilePhone + "</Field>"
                    + "<Field Name='Parent_x0020_1_x0020_Email'>" + clientObj.Parent1Email + "</Field>"
                    + "<Field Name='Marital_x0020_Status'>" + clientObj.Parent1MaritalStatus + "</Field>"
                    + "<Field Name='Parent_x0020_2_x002f_Caregiver_x'>" + clientObj.Parent2FirstName + "</Field>"
                    + "<Field Name='Parent_x0020_2_x002f_Caregiver_x0'>" + clientObj.Parent2LastName + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Street_x002'>" + clientObj.Parent2StreetAddress + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_City'>" + clientObj.Parent2City + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_State'>" + clientObj.Parent2State + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Zip'>" + clientObj.Parent2Zip + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Home_x0020_'>" + clientObj.Parent2HomePhone + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Work_x0020_'>" + clientObj.Parent2WorkPhone + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Mobile_x002'>" + clientObj.Parent2MobilePhone + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Email'>" + clientObj.Parent2Email + "</Field>"
                    + "<Field Name='Parent_x0020_2_x0020_Marital_x00'>" + clientObj.Parent2MaritalStatus + "</Field>"
                    + "<Field Name='Insurance_x0020_Company_x0020_Na'>" + clientObj.InsuranceCompanyName + "</Field>"
                    + "<Field Name='INSURED'>" + clientObj.InsuredCardHoldersName + "</Field>"
                    + "<Field Name='INSURED_x0020_DOB'>" + clientObj.InsuredCardHoldersDateOfBirth.ToString("yyyy-MM-dd") + "</Field>"
                    + "<Field Name='Insured_x0020_SSN'>" + clientObj.InsuredSSN + "</Field>"
                    + "<Field Name='Member_x0020_Number'>" + clientObj.MemberNumber + "</Field>"
                    + "<Field Name='GROUP_x0020__x0023_'>" + clientObj.GroupNumber + "</Field>"
                    + "<Field Name='Physician'>" + clientObj.Physician + "</Field>"
                    + "<Field Name='Physician_x0020_Phone_x0020_Numb'>" + clientObj.PhysicianPhoneNumber + "</Field>"
                    + "<Field Name='Medicaid_x0020_Id'>" + clientObj.MedicaidNumber + "</Field>"
                    + "<Field Name='Need_x0020_additional_x0020_help'>" + clientObj.NeedAdditionalHelp + "</Field>"
                    + "<Field Name='Interested_x0020_in_x0020_Speech'>" + clientObj.InterestedInSpeechAndLanguageServices + "</Field>"
                    + "<Field Name='Interested_x0020_in_x0020_Occupa'>" + clientObj.InterestedInOccupationalTherapy + "</Field>"
                    + "</Method>";

                XElement xElement = Utility.ToXElement(batch);

                proxy.UpdateListItems("Clients", xElement);
            }
            catch (Exception ex)
            {
                Utility.ShowErrorMessage(ex);
            }

        }

上記のコードは正常に動作します。新しいリスト項目を追加できます。上記のコードの「Clients」リストはカスタム リストです。「クライアント」リストには、列名 Image のフィールドがもう 1 つあります。タイプは「ハイパーリンクまたはイメージ」です。Web アドレスを指定することで、この列に画像を手動で追加できます。しかし、コード ビハインドを介してこの画像を追加したいと考えています。画像のバイト配列があります。ソースURLもあります。上記のフィールド値で画像を追加したい。特定のリスト項目に画像を追加したい。画像を追加してリスト項目を更新したいということです。どうすればいいですか。上記の問題を解決できるコードまたはリンクを教えてください。

4

1 に答える 1

0

SharePoint の Web サービスを使用してファイルを作成すると、常にコピー サービスを使用することになります。リスト項目に添付ファイルを追加している場合、これを回避できる場合があります。そうでない場合は、次の例で正しい方向に進むことができます。

    Byte[] bytes = new Byte[InputFile.PostedFile.InputStream.Length];
    InputFile.PostedFile.InputStream.Read(bytes, 0, bytes.Length);
    string soapStr =
        @"<?xml version=""1.0"" encoding=""utf-8""?>
            <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
              <soap:Body>
                <CopyIntoItems xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">
                  <SourceUrl>http://devint/a/ceo/PublishingImages/FridayMemoHeader1.png</SourceUrl>
                  <DestinationUrls>
                    <string>http://sp-pubdev:88/Resources/Images/testFile.png</string>
                  </DestinationUrls>
                  <Fields>
                  </Fields>
                  <Stream>{1}</Stream>
                </CopyIntoItems>
              </soap:Body>
            </soap:Envelope>";

    System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Url);
    req.Headers.Add("SOAPAction", "\"http://schemas.microsoft.com/sharepoint/soap/CopyIntoItems\"");
    req.ContentType = "text/xml;charset=\"utf-8\"";
    req.Accept = "text/xml";
    req.Method = "POST";
    //req.Credentials = System.Net.CredentialCache.DefaultCredentials;
    req.Credentials = new System.Net.NetworkCredential("myUserName", "myPassword", "Domain");

    using (System.IO.Stream stm = req.GetRequestStream())
    {
        soapStr = string.Format(soapStr, "testFile.png", Convert.ToBase64String(bytes));
        using (System.IO.StreamWriter stmw = new System.IO.StreamWriter(stm))
        {
            stmw.Write(soapStr);
        }
    }

おそらく、ファイルをバイト配列にロードする最初の 2 行と、次の行に最も関心があるでしょう。

soapStr = string.Format(soapStr, "testFile.png", Convert.ToBase64String(bytes));

そのバイト配列が base64 文字列に変換され、SOAP 要求に挿入される場所。幸運を!

于 2012-08-29T15:29:28.303 に答える