Archivo

Archive for the ‘Visual studio 2010’ Category

Solución error en Sharepoint: The Copy web service method must be called on the same domain that contains the destination url.

enero 16, 2014 Deja un comentario

Este error se soluciona realizando un mapping de la url que se esta implementando para acceder al servicio por ejemplo la URL que generamos cuando salimos por HTTPS:

En un post anterior Explico como configurarlo:

https://mteheran.wordpress.com/2014/01/05/configurando-https-en-sharepoint/

Este Link también paso a paso como realizar el mapping de Urls en sharepoint:

http://sharepointtidbits.blogspot.com/2010/11/once-you-have-your-sharepoint-site-up.html

 

 

Invocar un reporte alojado en el servidor de Reporting Services C#

enero 11, 2014 Deja un comentario

Para invocar un reporte que se encuentre dentro del servidor de reporte solo debemos especificar los datos dentro de nuestro ReportViewer  de la siguiente manera:


ReportViewer1.ProcessingMode = ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://Servidor//");
ReportViewer1.ServerReport.ReportPath = "Reportes" + "/" + "Reporte.rdl";


//de esta manera podemos obtener los parámetros que va recibir el reporte y pasárselos:
List param = new List();
var listPara = ReportViewer1.ServerReport.GetParameters();
for (int i = 0; i < listPara.Count; i++)
{
param.Add(new ReportParameter(listPara[i].Name, "Valor Prametro",false));
}
ReportViewer1.ServerReport.SetParameters(param);
ReportViewer1.ServerReport.Refresh();

Si el reporte necesita credenciales para conectarse se debe usar de la siguiente manera:

ReportViewer1.ServerReport.ReportServerCredentials = new CustomReportCredentials("User", "Password", "Dom");

y para usar la clase de CustomReportCredentials debemos crearla dentro de la pagina donde este llamando el reporte de la siguiente manera:


public class CustomReportCredentials : Microsoft.Reporting.WebForms.IReportServerCredentials
{


// local variable for network credential.
private string _UserName;
private string _PassWord;
private string _DomainName;
private WindowsIdentity _ImpersonationUser;
public CustomReportCredentials(string UserName, string PassWord, string DomainName)
{
_UserName = UserName;
_PassWord = PassWord;
_DomainName = DomainName;
// _ImpersonationUser = ImpersonationUser;
}
public WindowsIdentity ImpersonationUser
{
get
{
return null; // not use ImpersonationUser
}
}
public ICredentials NetworkCredentials
{
get
{


// use NetworkCredentials
return new NetworkCredential(_UserName, _PassWord, _DomainName);
}
}
public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)
{


// not use FormsCredentials unless you have implements a custom autentication.
authCookie = null;
user = password = authority = null;
return false;
}

}

Accediendo a servicios de Sharepoint por HTTPs

enero 8, 2014 1 comentario

En un post anterior explico como configurar el HTTPs en los sitios de Sharepoint en este les explico el código de como consumirlo:
https://mteheran.wordpress.com/2014/01/05/configurando-https-en-sharepoint/

Primero debes instanciar estas reglas globales en nuestra clase donde estemos ejecutando cualquier servicio ya sea el List.asmx o el Copy.asmx:


ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

Luego debemos crear nuestro punto de inicio y fin para el consumir el servicio


BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxBufferSize = 99999999;
binding.MaxReceivedMessageSize = 99999999;
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

Luego configuramos el punto final y realizamos la logica que necesitamos esta es igual para el servicio Lists.asmx para este caso muestro el ejemplo de como se usa con el Copy.asmx y realizo la opción de leer un archivo.

EndpointAddress endpoint = new EndpointAddress({Ursharepointl} + "/_vti_bin/Copy.asmx"));
using (CopySoapClient client = new CopySoapClient(binding, endpoint))
{
client.Endpoint.Address = new System.ServiceModel.EndpointAddress({Ursharepointl} + "/_vti_bin/Copy.asmx");
client.Endpoint.Contract.Name = "ws.App.SharePointDocuments.CopySoap";
client.Endpoint.Binding.Name = "basicHttpBinding";
client.Endpoint.Contract.ConfigurationName = "CopySoap";
NetworkCredential cred = new NetworkCredential(strUser, strPassWord);
client.ClientCredentials.Windows.ClientCredential = cred;
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

client.Open();
string destinationUrl = {RutaArchivo} + file;
byte[] bitFile;
FieldInformation[] outFields;
uint ret = client.GetItem(destinationUrl, out outFields, out bitFile);
fileinfo.Content = bitFile;
fileinfo.Errors = "";
fileinfo.P8_Url = destinationUrl;
client.Close();

}

Cualquier duda pueden dejarla en los comentarios.

convert numbers written in letters to integers

abril 15, 2013 Deja un comentario

 

TextManager is a library for manipulating text and contains many functions including the power that convert a number written in letters to integer

example:

TextManager.ConverterManager.StringToInteger(“en”,”Two”);

DownLoad Library project:

https://github.com/Mteheran/TextManager

Encontrar palabras duplicadas continuas .net

Aveces pasa en los texto que quedan palabras repetidas como ” texto es es” pocas veces esto tiene un significado así que podemos encontrarlas y si gustamos eliminarlas.

Acá les dejo el código para encontrar dichas palabras:


/// <summary>
/// find number words repet in text
/// </summary>
/// <param name="strWord">word to find</param>
/// <param name="bolUpperLowerCase"></param>
/// <returns>Match property width find or null if not find</returns>
public List<Match> FindWordRepetContinue(string strWord, bool bolIgnoreUppercaseLowercase)
{
// Define a regular expression for repeated words.
Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b",
RegexOptions.Compiled | RegexOptions.IgnoreCase);


List<Match> lstmatch = new List<Match>();


// Find matches.
MatchCollection matches = rx.Matches(TextOriginal);


foreach (Match item in matches)
{
if (bolIgnoreUppercaseLowercase)
{
string strTempValue = item.Value.ToLower();
if (strTempValue.ToLower().Contains(strWord.ToLower()))
lstmatch.Add(item);
}
else
{
if (item.Value.ToLower().Contains(strWord.ToLower()))
lstmatch.Add(item);
}


}


return lstmatch;

}

recuerden que pueden encontrar la librería completa en  https://github.com/Mteheran/TextManager

Completa libreria para manejo de texto en .net #TextManager

TextManager es una librería que contiene diferentes herramientas que te ayudan a manipular texto de una manera mas fácil y rápida en .net

Contiene herramientas como:

– Contador de letras

– Contador de palabras

– Búsqueda de palabras repetidas continuas

– Realiza búsquedas exactas o también puede omitir mayúsculas y minúsculas

– Comprueba diferentes formatos o tipos de datos como boo, int, double, short o datetime.

Algunas funcionalidades a futuro:

– Transformación de números a texto y viceversa

– Anteposición de caracteres en palabras encontradas

– Generación automática de  signos de puntuación

– Conversión de colores de texto a RGB y viceversa

Recuerda apoyar el proyecto y enviar tus mejoras o códigos realizados para mejorar el componente:

https://github.com/Mteheran/TextManager

Llamado continuo a un web service usando un trigger #Silverlight

marzo 25, 2013 Deja un comentario

Quiero mostrarles un pequeño truco de como realizar un llamado continuo a un web service es muy útil para verificar datos o cambios en la base de datos, ojo esto no se debe usar si se desea crear un chat o cosas así puesto que es altamente ineficiente esto es algo que en realidad no se debe hacer pero aveces no tenemos el tiempo y esto es una solución rápida.

Lo que hago es generar un trigger de una animación  que tiene su respectivo tiempo de ejecución y que altera cualquier propiedad del objeto:

<Image x:Name="ImageTriguer" Width="0" Height="0" Opacity="1" Source="Icons/icono.png">
<Image.Triggers>
<EventTrigger RoutedEvent="Image.Loaded" >
<BeginStoryboard>
<Storyboard x:Name="StoryBoardAnimation1">
<DoubleAnimation Completed="DoubleAnimation_Completed"
Storyboard.TargetName="ImageTriguer"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:20"
AutoReverse="False" BeginTime="0" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>

como ven debemos crear un evento en el código al momento en que se complete la animación llamado DoubleAnimation_Completed  hay es donde colocaremos el llamado al servicio y luego lo que hacemos es volver a comenzar la animación con el método begin para el StoryBoard


private void DoubleAnimation_Completed(object sender, EventArgs e)
{
CallMethodWebService();
StoryBoardAnimation1.Begin();
}

 

como ven es un truco muy útil pero muy ineficiente y que en realidad no se debe hacer pero nos saca de apuros.

espero les sirva.