quarta-feira, 14 de novembro de 2012
What's new in Windows Phone SDK 8.0
Este novo SDK trás realmente um número grande de novos recursos para o desenvolvedor, até porque temos agora acesso a um novo kernel. Desta forma, é imprescindível que o desenvolvedor as conheça para poder tirar o máximo de proveito desta plataforma de desenvolvimento.
Como um vislumbre, faremos apenas um overview dos seguintes novos\atualizados recursos:
1 - SDK tools
2 - Tiles and notifications
3 - Lock screen
4 - Maps and navigation
5 - Location
6 - Speech
7 - Camera and photos
8 - User interface
9 - Communications
10 - Data and extensibility
Segue link do meu artigo publicado no Windows Phone Brasil
[]s
quinta-feira, 1 de novembro de 2012
Desenvolvimento Windows Phone 8 - Primeiros Passos
Olá desenvolvedores,
Segue mais uma artigo sobre desenvolvimento no Windows Phone. Desta vez analisaremos como preparar um ambiente para desenvolver para o NOVO Windows Phone 8
Segue link do meu artigo publicado no Windows Phone Brasil
[]s
quarta-feira, 10 de outubro de 2012
Utilitário PSExec
Olá pessoal
Segue uma dica interessante do utilitário PSExec, disponível no TechNet na qual podemos executar comandos remotos em um servidor. Este utilitário faz parte da família Sysinternals Process Utilities.
Um exemplo prático na utilização deste recurso é a possibilidade de reiniciar os serviços do Internet Information Services em um servidor, rapidamente.
Para este caso, o comando ficaria:
PSExec -u domain\username -p password \\servername iisreset
Pensando em um projeto onde você trabalha em equipe, ter a possibilidade de execução
de tarefas no servidor sem a necessidade de "estar lá" - via Remote Desktop - é realmente muito prático.
Baixando o utilitário, copie o arquivo PSExec.exe no [\Windows\System32] da sua máquina para uma execução direta no DOS CMD.
[]s
sexta-feira, 24 de agosto de 2012
Windows Phone - Visão Geral dos Sensores
Neste artigo vamos conhecer melhor os tipos de sensores no Windows Phone e como atuar programaticamente neles.
Segue link do meu artigo publicado no Windows Phone Brasil
[]s
CRM 2011 - Javascript + WCF
Olá Pessoal,
Talvez já tenham notado que executar um WCF via JavaScript não é tão fácil como parece ou como era a chamada de um tradicional Web Services .ASMX .
Isto porque por padrão, no WCF, este tipo de execução no Client vem desabilitado.
Desta forma, segue um tutorial para uma execução bem sucedida no seu JScript.
1 - Habilitar compatibilidade de execução ASP.NET na sua classe. Para tanto, adicione a diretiva, conforme exemplificado abaixo:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
2 - Implementar as diretivas na sua INTERFACE de classe, conforme exemplo abaixo:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
string MyMethod(string p1, string p2);
}
3 - Implementar o seguinte WEB.CONFIG:
P.S.: Se você estiver executando uma URL segura (httpS) use a propriedade [httpsGetEnabled] senão [httpGetEnabled] na seção [serviceMetadata]
P.S.2: Não esqueça de trocar as frases [YOURNAMESPACE] e [YOURURL] pelas respectivas informações reais do seu projeto.
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<identity impersonate="true" />
<customErrors mode="Off"/>
<httpModules>
<clear/>
</httpModules>
</system.web>
<system.serviceModel>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
<services>
<service name="YOURNAMESPACE.Service1" behaviorConfiguration="ServiceBehaviors">
<endpoint name="Endpoint"
address="http://YOURURL/Service1.svc"
binding="webHttpBinding"
contract="YOURNAMESPACE.IService1"
behaviorConfiguration="WCFAjaxBehavior"
bindingConfiguration="webBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WCFAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviors">
<serviceDiscovery />
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport"></security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
4 - E como último passo, a execução do seu WCF via JScript:
var url = "http://YOURURL/Service1.svc/MyMethod";
var client = null;
if (window.XMLHttpRequest)
client = new XMLHttpRequest();
else if (window.ActiveXObject)
client = new ActiveXObject("Microsoft.XMLHTTP");
var data = '{';
data += '"p1":"' + "SOMEVALUE" + '"';
data += ',';
data += '"p2":"' + "SOMEVALUE" + '"';
data += '}';
client.open ('POST', url, false);
client.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
client.send(data);
var resultValue = client.responseText;
That's It!
Talvez já tenham notado que executar um WCF via JavaScript não é tão fácil como parece ou como era a chamada de um tradicional Web Services .ASMX .
Isto porque por padrão, no WCF, este tipo de execução no Client vem desabilitado.
Desta forma, segue um tutorial para uma execução bem sucedida no seu JScript.
1 - Habilitar compatibilidade de execução ASP.NET na sua classe. Para tanto, adicione a diretiva, conforme exemplificado abaixo:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
2 - Implementar as diretivas na sua INTERFACE de classe, conforme exemplo abaixo:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
string MyMethod(string p1, string p2);
}
3 - Implementar o seguinte WEB.CONFIG:
P.S.: Se você estiver executando uma URL segura (httpS) use a propriedade [httpsGetEnabled] senão [httpGetEnabled] na seção [serviceMetadata]
P.S.2: Não esqueça de trocar as frases [YOURNAMESPACE] e [YOURURL] pelas respectivas informações reais do seu projeto.
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<identity impersonate="true" />
<customErrors mode="Off"/>
<httpModules>
<clear/>
</httpModules>
</system.web>
<system.serviceModel>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
<services>
<service name="YOURNAMESPACE.Service1" behaviorConfiguration="ServiceBehaviors">
<endpoint name="Endpoint"
address="http://YOURURL/Service1.svc"
binding="webHttpBinding"
contract="YOURNAMESPACE.IService1"
behaviorConfiguration="WCFAjaxBehavior"
bindingConfiguration="webBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WCFAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviors">
<serviceDiscovery />
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport"></security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
4 - E como último passo, a execução do seu WCF via JScript:
var url = "http://YOURURL/Service1.svc/MyMethod";
var client = null;
if (window.XMLHttpRequest)
client = new XMLHttpRequest();
else if (window.ActiveXObject)
client = new ActiveXObject("Microsoft.XMLHTTP");
var data = '{';
data += '"p1":"' + "SOMEVALUE" + '"';
data += ',';
data += '"p2":"' + "SOMEVALUE" + '"';
data += '}';
client.open ('POST', url, false);
client.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
client.send(data);
var resultValue = client.responseText;
That's It!
sexta-feira, 10 de agosto de 2012
Corretor Ortográfico no Browser
quarta-feira, 25 de julho de 2012
Windows Phone - Application Life Cycle
Segue mais uma artigo sobre desenvolvimento no Windows Phone. Desta vez, analisaremos um ponto vital no desenvolvimento para esta plataforma, o Ciclo de Vida de Uma Aplicação.
Segue link do meu artigo publicado no Windows Phone Brasil !
[]s
sexta-feira, 13 de julho de 2012
Desenvolvimento Windows Phone - Primeiros Passos
Conforme o tempo permitir estarei publicando uma série de artigos sobre desenvolvimento para Windows Phone.
Matéria não falta, existe um "mundo" de informações técnicas sobre esta nova tecnologia, que cresce a cada dia!
Segue link do meu artigo no Blog do Windows Phone Brasil !
Abraços!
terça-feira, 10 de janeiro de 2012
CRM 2011 >> SubGrid - Totalização de Valor (via JScript)
No CRM 2011 temos a possibilidade de explorar muito bem desenvolvimentos em JScript, jQuery, jSon (ou REST OData).
Seguindo esta linha, segue um código, pequeno inclusive, que faz uma Totalização de Valores, buscando as informações em um SubGrid!
Para a execução do código, basta adicioná-lo no formulário, e chamá-lo no método OnLoad.
Importante adicionar os JScripts prontos da Microsoft, para execução de chamadas jQuery, sendo eles [jquery1.4.1.min.js] e [jqueryrestdataoperationfunctions.js].
Importante também adicionar o campo de moeda do CRM (TransactionCurrencyId), quando existir na tela do CRM algum campo do tipo moeda. Neste caso usaremos e o script abaixo preenche o campo automaticamente.
Estes arquivos podem ser encontrados no SDK do CRM (quando descompactado em qualquer diretório), no caminho [\SDK\samplecode\js\restendpoint\jqueryrestdataoperations\jqueryrestdataoperations\scripts].
Segue Script:
var timeOutVar;
function PrepareAddUpValue() {
var grid = document.getElementById('GRIDNAME');
if (grid == null)
{
// delay one second and try again.
timeOutVar = setTimeout(PrepareAddUpValue, 1000);
return;
}
clearTimeout(timeOutVar);
grid.attachEvent("onrefresh", AddUpValue);
}
function AddUpValue(){
var gridControl = document.getElementById("GRIDNAME").control;
var ids = gridControl.get_allRecordIds();
var new_total = 0.0;
for(var i = 0; i < ids.length; i++)
{
str_value = gridControl.getCellValue("NOME_COLUNA_GRID", ids[i]).replace("R$", "").replace(" ", "");
new_total += parseFloatString(str_value);
}
Xrm.Page.getAttribute("new_total").setValue(new_total);
Xrm.Page.data.entity.save();
}
function parseFloatString(str){
str = String(str);
var strNew = "";
for(var i=0; i < str.length; i++){
if (isNaN(parseInt(str.charAt(i))) == false) strNew +=str.charAt(i);
}
return parseFloat(strNew);
}
function SetCurrency(){
if (Xrm.Page.getAttribute("transactioncurrencyid") != null) return;
var filter = "?$select=TransactionCurrencyId,CurrencyName";
retrieveMultiple("TransactionCurrencySet", filter, retrieveMultipleCurrencyCompleted, null);
}
function retrieveMultipleCurrencyCompleted(data, textStatus, XmlHttpRequest){
if (data == null) return;
var idValue = data[0].TransactionCurrencyId;
var textValue = data[0].CurrencyName;
var thisEntityType = 'transactioncurrency';
Xrm.Page.getAttribute("transactioncurrencyid").setValue([{ id: idValue, name: textValue, entityType: thisEntityType }]);
}
SetCurrency();
Veja uma tela de exemplo. Note que, ao adicionar um novo registro, o Script é acionado, totalizando o valor em um campo do formulário. Isto acontece porque o Script atua no evento [OnRefresh] do SubGrid do CRM.
Seguindo esta linha, segue um código, pequeno inclusive, que faz uma Totalização de Valores, buscando as informações em um SubGrid!
Para a execução do código, basta adicioná-lo no formulário, e chamá-lo no método OnLoad.
Importante adicionar os JScripts prontos da Microsoft, para execução de chamadas jQuery, sendo eles [jquery1.4.1.min.js] e [jqueryrestdataoperationfunctions.js].
Importante também adicionar o campo de moeda do CRM (TransactionCurrencyId), quando existir na tela do CRM algum campo do tipo moeda. Neste caso usaremos e o script abaixo preenche o campo automaticamente.
Estes arquivos podem ser encontrados no SDK do CRM (quando descompactado em qualquer diretório), no caminho [\SDK\samplecode\js\restendpoint\jqueryrestdataoperations\jqueryrestdataoperations\scripts].
Segue Script:
var timeOutVar;
function PrepareAddUpValue() {
var grid = document.getElementById('GRIDNAME');
if (grid == null)
{
// delay one second and try again.
timeOutVar = setTimeout(PrepareAddUpValue, 1000);
return;
}
clearTimeout(timeOutVar);
grid.attachEvent("onrefresh", AddUpValue);
}
function AddUpValue(){
var gridControl = document.getElementById("GRIDNAME").control;
var ids = gridControl.get_allRecordIds();
var new_total = 0.0;
for(var i = 0; i < ids.length; i++)
{
str_value = gridControl.getCellValue("NOME_COLUNA_GRID", ids[i]).replace("R$", "").replace(" ", "");
new_total += parseFloatString(str_value);
}
Xrm.Page.getAttribute("new_total").setValue(new_total);
Xrm.Page.data.entity.save();
}
function parseFloatString(str){
str = String(str);
var strNew = "";
for(var i=0; i < str.length; i++){
if (isNaN(parseInt(str.charAt(i))) == false) strNew +=str.charAt(i);
}
return parseFloat(strNew);
}
function SetCurrency(){
if (Xrm.Page.getAttribute("transactioncurrencyid") != null) return;
var filter = "?$select=TransactionCurrencyId,CurrencyName";
retrieveMultiple("TransactionCurrencySet", filter, retrieveMultipleCurrencyCompleted, null);
}
function retrieveMultipleCurrencyCompleted(data, textStatus, XmlHttpRequest){
if (data == null) return;
var idValue = data[0].TransactionCurrencyId;
var textValue = data[0].CurrencyName;
var thisEntityType = 'transactioncurrency';
Xrm.Page.getAttribute("transactioncurrencyid").setValue([{ id: idValue, name: textValue, entityType: thisEntityType }]);
}
SetCurrency();
Veja uma tela de exemplo. Note que, ao adicionar um novo registro, o Script é acionado, totalizando o valor em um campo do formulário. Isto acontece porque o Script atua no evento [OnRefresh] do SubGrid do CRM.
Assinar:
Postagens (Atom)