Rename File Using SharePoint Client Object Model? - sharepoint-2010

This may seem like a stupid question but I can't seem to find any answers on Google.
I have written a method to query SharePoint and rename a document based on the document name parameter I specify. I have used a similar method to rename folders and this has worked fine however when I try to rename a file I get an ArgumentOutOfRangeException
Here is my code:
public bool RenameFileInDocumentLibrary(string documentName, string newDocumentName, ClientContext clientContext)
{
{
bool isDocumentRenamed = false;
string url = "MySharePointSite";
List list = clientContext.Web.Lists.GetByTitle("MyDocLib");
CamlQuery query = new CamlQuery();
query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
"<Query>" +
"<Where>" +
"<And>" +
"<Eq>" +
"<FieldRef Name=\"FSObjType\" />" +
"<Value Type=\"Integer\">2</Value>" +
"</Eq>" +
"<Eq>" +
"<FieldRef Name=\"Title\"/>" +
"<Value Type=\"Text\">" + documentName + "</Value>" +
"</Eq>" +
"</And>" +
"</Where>" +
"</Query>" +
"</View>";
var files = list.GetItems(query);
clientContext.Load(list);
clientContext.Load(list.Fields);
clientContext.Load(files, fs => fs.Include(fi => fi["Title"],
fi => fi["DisplayName"],
fi => fi["FileLeafRef"]));
clientContext.ExecuteQuery();
if (files.Count == 0)
{
files[0]["Title"] = newDocumentName;
files[0]["FileLeafRef"] = newDocumentName;
files[0].Update();
clientContext.ExecuteQuery();
isDocumentRenamed = true;
}
return isDocumentRenamed;
}
}
}
Any help with this would be appreciated. Thanks!

You need to use the ListItems File member:
string newPath = files[0]["FileDirRef"] + "/" + "MyNewFileName" + ".extension";
files[0].File.MoveTo(newPath, MoveOperations.Overwrite);
files[0].Update();
clientContext.ExecuteQuery();

Related

How do I call Pay U Money Server through WCF?

i am creating a wcf service for Pay u Money I wrote same code like asp.net c# for Pay u Money, but using HttpWebRequest I'm facing this error:
SORRY! We were unable to process your payment
Same code I tried in simple asp.net c# and there working fine. Here I don't know what goes wrong, how could I solve this?
enter code here
public PayUMoneyModel PayUMoney(PayUMoneyModel Data)
{
PayUMoneyModel objPayUMoneyModel = new PayUMoneyModel();
action1 = ConfigurationManager.AppSettings["PAYU_BASE_URL"] +
"/_payment";
try
{
string[] hashVarsSeq;
string hash_string = string.Empty;
if (string.IsNullOrEmpty(Data.txnid)) // generating txnid
{
Random rnd = new Random();
string strHash = Generatehash512(rnd.ToString() +
DateTime.Now);
txnid1 = strHash.ToString().Substring(0, 20);
}
else if(Data.txnid!=null)
{
txnid1 = Data.txnid;
}
Data.txnid = txnid1;
Data.key= ConfigurationManager.AppSettings["MERCHANT_KEY"];
string salt= ConfigurationManager.AppSettings["SALT"];
System.Collections.Hashtable data = new System.Collections.Hashtable();
data.Add("key", Data.key);
data.Add("txnid", Data.txnid);
string AmountForm = Convert.ToDecimal(Data.amount).ToString("g29");// eliminating trailing zeros
//amount.Text = AmountForm;
data.Add("amount", 1.00);
data.Add("firstname", Data.firstname);
data.Add("email", Data.email);
data.Add("phone", Data.phone);
data.Add("productinfo", Data.productinfo);
data.Add("surl", Data.surl);
data.Add("furl", Data.furl);
data.Add("lastname", Data.lastname);
data.Add("curl", Data.curl);
data.Add("address1", Data.address1);
data.Add("address2", Data.address2);
data.Add("city", Data.city);
data.Add("state", Data.state);
data.Add("country",Data.country);
data.Add("zipcode", Data.zipcode);
data.Add("udf1", Data.udf1);
data.Add("udf2", Data.udf2);
data.Add("udf3", Data.udf3);
data.Add("udf4", Data.udf4);
data.Add("udf5", Data.udf5);
data.Add("pg", Data.pg);
data.Add("service_provider", "payu_paisa");
hash_string = Data.key + "|" + Data.txnid + "|" + AmountForm + "|" + Data.productinfo+ "|" + Data.firstname + "|" + Data.email + "|||||||||||" + salt;
string hash = Generatehash512(hash_string);
data.Add("hash", hash);
data.Add("abc", hash_string);
string strForm = PreparePOSTForm(action1, data);
if (strForm != "")
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(action1);
// httpWebRequest.ContentType = "text/html";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
httpWebRequest.ContentLength = strForm.Length;
string Json = "";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(strForm,0,strForm.Length);
streamWriter.Flush();
streamWriter.Close();
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
Json = streamReader.ReadToEnd().Replace(";", "");
}
}
HttpContext.Current.Response.Write(Json);
}
}
catch(Exception ex)
{
throw ex;
}
return objPayUMoneyModel;
}
this is my Post Form Method
private string PreparePOSTForm(string url, System.Collections.Hashtable data) // post form
{
//Set a name for the form
string formID = "PostForm";
//Build the form using the specified data to be posted.
StringBuilder strForm = new StringBuilder();
strForm.Append("<form id=\"" + formID + "\" name=\"" +
formID + "\" action=\"" + url +
"\" method=\"POST\">");
foreach (System.Collections.DictionaryEntry key in data)
{
strForm.Append("<input type=\"hidden\" name=\"" + key.Key +
"\" value=\"" + key.Value + "\">");
}
strForm.Append("</form>");
//Build the JavaScript which will do the Posting operation.
StringBuilder strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var v" + formID + " = document." +
formID + ";");
strScript.Append("v" + formID + ".submit();");
strScript.Append("</script>");
//Return the form and the script concatenated.
//(The order is important, Form then JavaScript)
return strForm.ToString() + strScript.ToString();
}
this is my key and salt provided by Payumoney website:-
Key:-rjQUPktU
Salt:-e5iIg1jwi8

Saved Docusign Document PDF's come out corrupted

I created a listener page that receives the Docusign webhooks. Everything is working as far as pulling data from the webhook, but when I cycle through the DocumentPDF's, it creates the PDF files but they are corrupted and cannot be opened (when I try to open it in Acrobat, I receive the following message: Acrobat could not open ... because it is either not a supported file type or because the file has been damaged.")
Can anybody help me figure out why the created pdf files are corrupted?
My code for the page is as follows:
protected void Page_Load(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(Request.InputStream);
string xml = sr.ReadToEnd();
string fileName = HttpContext.Current.Server.MapPath("") + "\\Results\\" + DateTime.Now.Ticks + ".xml";
File.WriteAllText(fileName, xml);
try
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
var mgr = new XmlNamespaceManager(xmldoc.NameTable);
mgr.AddNamespace("a", "http://www.docusign.net/API/3.0");
XmlNode envelopeStatus = xmldoc.SelectSingleNode("//a:EnvelopeStatus", mgr);
XmlNode envelopeId = envelopeStatus.SelectSingleNode("//a:EnvelopeID", mgr);
XmlNode status = envelopeStatus.SelectSingleNode("//a:Status", mgr);
if (status.InnerText == "Completed")
{
LogException("Looking for DocPDF's_" + DateTime.Now.Ticks + ";");
// Loop through the DocumentPDFs element, storing each document.
XmlNode docs = xmldoc.SelectSingleNode("//a:DocumentPDFs", mgr);
foreach (XmlNode doc in docs.ChildNodes)
{
string documentName = doc.ChildNodes[0].InnerText; // pdf.SelectSingleNode("//a:Name", mgr).InnerText;
string documentId = doc.ChildNodes[2].InnerText; // pdf.SelectSingleNode("//a:DocumentID", mgr).InnerText;
string byteStr = doc.ChildNodes[1].InnerText; // pdf.SelectSingleNode("//a:PDFBytes", mgr).InnerText;
LogException("Writing Out PDF_" + HttpContext.Current.Server.MapPath("") + "\\Documents\\" + envelopeId.InnerText + "_" + documentId + "_" + documentName + "_" + DateTime.Now.Ticks + ";");
File.WriteAllText(HttpContext.Current.Server.MapPath("") + "\\Documents\\" + envelopeId.InnerText + "_" + documentId + "_" + documentName, byteStr);
LogException("Successfully wrote out PDF_" + DateTime.Now.Ticks + ";");
}
}
}
catch (Exception ex)
{
LogException("Exception: " + ex.Message + "; InnerException: " + ex.InnerException.ToString() + "_" + DateTime.Now.Ticks + ";");
}
}
#mkl is correct. The Webhook (Connect) notification message's PDF content is base64 encoded. Decode it to obtain the PDF file.
An example: see line 402 of the recipe example webhook listener --
pdf_file.write(base64.b64decode(pdf.PDFBytes.string))
I am using an Azure Function and using a Blob storage to save it.
This worked for me:
var byteStr = doc.ChildNodes[1].InnerText;
outputBlob.Write(System.Convert.FromBase64String(byteStr));

Coded UI c# - how to click a table htmlcell

I have tried numerous things to access a cell in a table. I have actually found the row that I need based on an innertext search, but then when I change the columnindex to the column for the found row, I cannot get mouse.click(cell); to do anything. Please see my code below. It has been modified many times! I have also used record to capture information about the cell.
The Method:
` public string SelectExistingCustomer(UITestControl parent, TestContext TestContext, string sLastName)
{
Controls control = new Controls(this.parent);
EditControl econtrol = new EditControl(this.parent);
HtmlTable tCustomerSearch = new HtmlTable(this.parent);
//HtmlTable tCustomerSearch1 = tCustomerSearch;
HtmlCell cell = new HtmlCell(tCustomerSearch);
//HtmlCell cell = GetCell;
string sFullName = "";
string sRowIndex = "";
if (sLastName != "")
{
try
{
// CodedUI scrolls items into view before it can click them
bool notfound = true;
int NumberOfpages = 0;
while (notfound)
{
tCustomerSearch.SearchProperties.Add(HtmlTable.PropertyNames.TagName, "TABLE");
Trace.WriteLine("####tCustomerSearch??? : " + tCustomerSearch + " : TABLE.");
tCustomerSearch.SearchConfigurations.Add(SearchConfiguration.AlwaysSearch);
int rowcount = tCustomerSearch.RowCount;
Trace.WriteLine("Row###: " + rowcount + ".");
HtmlRow lastRow = (HtmlRow)tCustomerSearch.Rows[rowcount - 1];
//lastRow.EnsureClickable();
NumberOfpages++;
cell.SearchProperties.Add(HtmlCell.PropertyNames.InnerText, sLastName, PropertyExpressionOperator.Contains);
cell.SearchConfigurations.Add(SearchConfiguration.AlwaysSearch);
if (cell.TryFind())
{
notfound = false;
sFullName = cell.GetProperty(HtmlCell.PropertyNames.InnerText).ToString();
sRowIndex = cell.GetProperty(HtmlCell.PropertyNames.RowIndex).ToString();
Trace.WriteLine(string.Format("found name at page {0}", NumberOfpages));
Trace.WriteLine(string.Format("Table row nr: {0}", cell.RowIndex));
Trace.WriteLine("cell####: " + cell + ".");
}
else Trace.WriteLine("NOT FOUND: CELL###:" + cell + ". And sFullName: " + sFullName + ".");
}
Trace.WriteLine("CELL###:" + cell + ". And sFullName: " + sFullName + ". And sRowIndex: " + sRowIndex + ".");
cell.SearchProperties.Add(HtmlCell.PropertyNames.RowIndex, sRowIndex);
cell.SearchProperties.Add(HtmlCell.PropertyNames.ColumnIndex, "0");
cell.SearchProperties[HtmlCell.PropertyNames.InnerText] = "Get";
cell.SetFocus();
//HtmlInputButton stry = new HtmlInputButton(cell);
Mouse.Click(cell);
//Mouse.Click(stry);
Assert.IsTrue(!notfound);
}
catch (Exception ex)
{
Trace.WriteLine("Failed to Search and find. Exception: " + ex + ".");
return "Failed";
}
}
//else - For the Future
return sFullName;
}
Table and cell - I modified this from the recording, not really sure what this does but I did something similar when I was having difficulty selecting from a combox:
public class tCustomerSearch : HtmlTable
{
public tCustomerSearch(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{
#region Search Criteria
this.FilterProperties[HtmlTable.PropertyNames.ControlDefinition] = "class=\"table table-striped\"";
this.FilterProperties[HtmlTable.PropertyNames.Class] = "table table-striped";
this.FilterProperties[HtmlTable.PropertyNames.TagInstance] = "1";
#endregion
}
#region Properties
public HtmlCell GetCell
{
get
{
if ((this.mGetCell == null))
{
this.mGetCell = new HtmlCell(this);
#region Search Criteria
this.mGetCell.SearchProperties[HtmlCell.PropertyNames.InnerText] = "Get";
//this.GetCell.SearchProperties[HtmlCell.PropertyNames.MaxDepth] = "3";
Trace.WriteLine("###sLastName: " + sLastName + ". And mGetCell: " + mGetCell + ".");
#endregion
}
return this.mGetCell;
}
}
#endregion
// public string ctrlPropertyValue { get; private set; }
public string sLastName { get; }
#region Fields
private HtmlCell mGetCell;
#endregion
}
`
So, I found my own answer - even though this is not the best - it works!
` Keyboard.SendKeys("{TAB}");
Keyboard.SendKeys("{ENTER}");
'
I use this in place of mouse.click(cell);
The TAB highlights the button in the cell, and Enter triggers the event.

Execute Javascript using Selenium or HtmlUnit

I need small help.
I want to open some page using Java and Selenium or HtmlUnit, and after opening this page execute url like Ajax and get to String the response.
Let say, a want to open http://www.somepage.com , when driver is still on this page, execute GET http://www.somepage.com/myAjax/xyz , which should return JSON.
Then i want to get the JSON response and do something with it.
Could you help me, how to do it ?
Best regards
To inject your own javascript, you can do something like:
new WebConnectionWrapper(webClient) {
public WebResponse getResponse(WebRequest request) throws IOException {
WebResponse response = super.getResponse(request);
if (request.getUrl().toExternalForm().contains("my_url")) {
String content = response.getContentAsString("UTF-8");
// inject the below to the 'content'
String tobeInjected = ""
+ "<script>\n"
+ "var myOwnVariable;\n"
+ "var xmlhttp;\n"
+ "if (window.XMLHttpRequest) {\n"
+ " xmlhttp=new XMLHttpRequest();\n"
+ "}\n"
+ "else {\n"
+ " xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');\n"
+ "}\n"
+ "\n"
+ "xmlhttp.onreadystatechange=function() {\n"
+ " if (xmlhttp.readyState==4 && xmlhttp.status==200) {\n"
+ " myOwnVariable = xmlhttp.responseText;\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "xmlhttp.open('GET', 'http://www.somepage.com/myAjax/xyz', true);\n"
+ "xmlhttp.send();\n"
+ "</script>";
WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),
response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
response = new WebResponse(data, request, response.getLoadTime());
}
return response;
}
};
To retrieve the value of the javascript variable:
webClient.waitForBackgroundJavaScript(5_000);
String value = htmlPage.executeJavaScript("myOwnVariable").toString();

Invalid signature error with UpgradeableApp API

I am trying to run a code that would allow me to migrate Google Apps Marketplace to upgrade my apps to use OAuth 2.0 authentication for subscribed domains.
Unfortunately, I receive the following error message:
{"error":{"errors":[{"domain":"global","reason":"authError","message":"Invalid OAuth signature","locationType":"header","location":"Authorization"}],"code":401,"message":"Invalid OAuth signature"}}
The code that I run is:
final String consumerKey = "xxx";
final String consumerSecret = "yyy";
final String domain = "example.com";
final String account = "admin#example.com";
OAuthParameters oauthParameters = new OAuthParameters();
oauthParameters.setOAuthConsumerKey(consumerKey);
oauthParameters.setOAuthConsumerSecret(consumerSecret);
OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();
final String marketPlaceListingId = "xxxx+xxxxxxxxxxxxxxxxxxx";
final String chromeWebStoreItemId = "yyyyyyyyyyyyyyyyyyyyyyyyyyyy";
String requestUrl = "https://www.googleapis.com/appsmarket/v2/upgradableApp/"
+ marketPlaceListingId + "/" + chromeWebStoreItemId + "/" + domain;
String oauth_nonce = OAuthUtil.getNonce();
String oauth_timestamp = OAuthUtil.getTimestamp().toString();
String signatureMethod = "HMAC-SHA1";
oauthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
oauthParameters.setOAuthNonce(oauth_nonce);
oauthParameters.setOAuthTimestamp(oauth_timestamp);
oauthParameters.setOAuthSignatureMethod(signatureMethod);
String baseString = "PUT"
+ "&" + OAuthUtil.encode(requestUrl)
+ "&" + OAuthUtil.encode("oauth_consumer_key=" + oauthParameters.getOAuthConsumerKey()
+ "&oauth_nonce=" + oauth_nonce
+ "&oauth_signature_method=" + signatureMethod
+ "&oauth_timestamp=" + oauth_timestamp
+ "&oauth_version=1.0"
+ "&xoauth_requestor_id=" + OAuthUtil.encode(account));
String oauth_signature = signer.getSignature(baseString, oauthParameters);
oauthParameters.setOAuthSignature(oauth_signature);
OAuthHelper oauthHelper = new GoogleOAuthHelper(signer);
String header = oauthHelper.getAuthorizationHeader(requestUrl + "?xoauth_requestor_id=" + OAuthUtil.encode(account), "PUT", oauthParameters);
HttpClient httpClient = new DefaultHttpClient();
HttpPut httpPut = new HttpPut(requestUrl + "?xoauth_requestor_id=" + OAuthUtil.encode(account));
httpPut.addHeader("Authorization", header);
//httpPut.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = null;
try {
response = httpClient.execute(httpPut);
} catch (Exception e) {
System.out.println(e.getMessage());
throw new ServletException(e);
}
Please support.
Thank you,
Evgeny