Elemento de lote en Sharepoint para eliminar un elemento de la lista cuando no conoce el ID

StackOverflow https://stackoverflow.com/questions/1212534

Pregunta

Deseo eliminar un elemento de una lista cuando coincide con algunos criterios usando el servicio web UpdateListItems. No sé el ID del elemento de la lista que quiero eliminar, pero sí conozco los criterios.

Por ejemplo, en SQL podría hacer:

DELETE FROM listName WHERE LastName='Bauer' AND FirstName='Jack'

¿Cómo escribirías un elemento de lote para hacer esto?

Update

¿Sería algo así?

<Batch PreCalc='TRUE' OnError='Continue'>
  <Method ID='1' Cmd='Delete'>
    <Field Name='LastName'>Bauer</Field>
    <Field Name='FirstName'>Jack</Field>
  </Method>
</Batch>

¿La identificación del Método o la identificación de la cosa que desea eliminar?

Update

He intentado el siguiente código y el error que se devuelve es

Invalid URL Parameter

The URL provided contains an invalid Command or Value. Please check the URL again.

Supongo que no es posible prescindir de la ID ...

¿Fue útil?

Solución 2

Esto no parece posible.

Mi manera de resolver esto fue consultar la lista y obtener los id. El bucle para la respuesta extrae los ID y luego crea un método para cada ID para eliminarlo.

Otros consejos

Como una adición a la respuesta de ChrisB (formatear una consulta CAML en un comentario no pareció funcionar), haría la consulta de la siguiente manera:

SPQuery query = new SPQuery();
query.Query = "<Where><And>"+
  "<Eq><FieldRef Name='LastName'/><Value Type='Text'>Bauer</Value></Eq>"
  "<Eq><FieldRef Name='FirstName'/><Value Type='Text'>Jack</Value></Eq>"
  "</And></Where>";
SPListItemCollection items = list.GetItems(query);

(esta es la especificación del modelo de objeto, pero se extiende naturalmente a la llamada de servicios web)

Luego recorrerás los elementos de la lista y construirás tu lote.

Del mismo modo, para obtener el elemento de lista devuelto por el modelo de objetos de Sharepoint 2010 que se puede usar en el valor correspondiente de C # de un nodo clave en xml, tenemos que deshacernos de ese carácter adicional adjunto en la posición 1 en el xml. Esto se puede hacer de la siguiente manera:

// Código para descifrar la cadena XML devuelta desde el elemento de lista del modelo de objetos de SharePoint Server 2010. - Cortesía - Rajiv Kapoor - ideals.co.in. Ver http://www.ideals.co.in/estore/code.php para una solución completa.

        string sRetVal = "";
        string myXMLStr = "​<robot><Key>ConstSigned</Key><Value>Rad Is Signed</Value><Key>CodeAddChangeReqSub</Key><Value>ACRS</Value><Key>CodeAddChangeReqInit</Key><Value>ACRI</Value><Key>CodeSupTaskComp</Key><Value>STC</Value><Key>CodeSupApprComp</Key><Value>SAC</Value><Key>CodeSupRejComp</Key><Value>SAR</Value><Key>CodeOperAppr</Key><Value>OPA</Value><Key>CodeOperRej</Key><Value>OPR</Value><Key>Oper1TaskCreated</Key><Value>OTC</Value><Key>Oper2TaskCreated</Key><Value>QCTC</Value><Key>Oper2TaskAppr</Key><Value>QCRA</Value><Key>Oper2TaskRej</Key><Value>QCRR</Value><Key>ApprPending</Key><Value>Approval Pending</Value><Key>PendingProcessing</Key><Value>Pending Processing</Value><Key>PendingReview</Key><Value>Pending Review</Value><Key>Approved</Key><Value>Approved</Value><Key>GroupOperation</Key><Value>Operation</Value><Key>WorkFlowHistoryList</Key><Value>/Lists/Workflow History</Value><Key>ColInitDateTime</Key><Value>Initiated Date Time</Value><Key>ColWorkFlowHistoryParentInst</Key><Value>Workflow History Parent Instance</Value><Key>ColWorkflowAssId</Key><Value>Workflow Association ID</Value><Key>ColListId</Key><Value>List ID</Value><Key>ColPrimaryItemId</Key><Value>Primary Item ID</Value><Key>ColDate</Key><Value>Date Occurred</Value><Key>ColOutcome</Key><Value>Outcome</Value><Key>ColDesc</Key><Value>Description</Value><Key>ColCreated</Key><Value>Created</Value><Key>ColTaskStatus</Key><Value>TaskStatus</Value><Key>ServiceReqList</Key><Value>Service Request</Value><Key>CAUEventList</Key><Value>Events</Value><Key>ReqStatus1</Key><Value>Request Status</Value><Key>ReqStatCode</Key><Value>Request Status Code</Value><Key>ColumnCode</Key><Value>Code</Value><Key>SuperUser</Key><Value>SuperUser</Value><Key>AssignedTo</Key><Value>AssignedTo</Value><Key>TaskListId</Key><Value>ID</Value><Key>DocLibId</Key><Value>List</Value><Key>WorkflowInstanceId</Key><Value>WorkflowInstanceID</Value><Key>TaskTitle</Key><Value>Title</Value><Key>Priority</Key><Value>Priority</Value><Key>ReqStatusCode</Key><Value>Request Status Code</Value><Key>ServiceRequestList</Key><Value>Service Request</Value><Key>CAUEventList</Key><Value>Events</Value><Key>ColumnDesc</Key><Value>Description</Value><Key>ColumnStatus</Key><Value>Status</Value><Key>Completed</Key><Value>Completed</Value><Key>ReqStatus</Key><Value>Request Status</Value><Key>ColumnTaskStatus</Key><Value>TaskStatus</Value><Key>ColumnPerComp</Key><Value>PercentComplete</Value><Key>Rejected</Key><Value>Rejected</Value><Key>CodeSupTaskCreated</Key><Value>STC</Value><Key>CodeSupTaskInit</Key><Value>SAI</Value><Key>Oper1TaskInit</Key><Value>OPI</Value><Key>Oper2TaskInit</Key><Value>QCRI</Value><Key>ColActedBy</Key><Value>Acted By</Value><Key>WorkFlowCode</Key><Value>Workflow Code</Value><Key>ProcCode</Key><Value>Process Code</Value></robot>";
        string myXMLStr1 = myXMLStr;
        int ln = myXMLStr.Length;
        int lnMinus1 = ln - 1;
        char[] myst = { ' ', ' ', ' '};// create a long array enough to fit the xml
        string mys = "";
        object m1 ;
        string m2 = ""; 

        myXMLStr.CopyTo(0, myst, 0, ln);            m1 = myst.Clone();
        m2 = new string(myst);// m1;// ToString();
        m2.TrimStart();
        m2.TrimEnd();
        m2 = m2.Substring(1);
        sRetVal = GetConfigVal(m2, "ProcCode");
        Console.WriteLine("****#*" + sRetVal + "*#******");

No estoy tan familiarizado con el uso de los servicios web, pero supongo que hay uno para buscar. Con la API, crearía un SPQuery y usaría CAML para obtener los elementos de la lista que desea eliminar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top