Calendario de Outlook en Internet

Dos tipos:

  • Instantáneas de calendario: El calendario se envía en un mensaje de correo electrónico, no está vinculado al calendario de origen y no se actualiza inmediatamente.
  • Suscripciones a los calendarios de Internet: Los calendarios se descargan en un servicio de publicación de calendarios o de un sitio Web especial. Es necesario suscribirse y configurar Outlook. Se sincroniza periódicamente con el calendario de Outlook.

Instantáneas de calendario

1. Clic derecho en el calendario y seleccionar “Enviar por correo electrónico”

2. Seleccionar las opciones para el envío de la instantánea del calendario

 

3. Al aceptar las opciones anteriores se inserta el siguiente texto en el cuerpo del mensaje

y un archivo adjunto con el calendario en formato ICS con el calendario correspondiente.

Suscripciones a Internet

Los pasos 1 a 5 sólo son necesarios si no se cuenta con una suscripción a “Office online”

1. Clic derecho en el calendario y seleccionar “Publicar en Internet” y “Publicar en office online”

2. Proporcionar una cuenta válida de Windows Live

3. Aceptar los acuerdos legales repitiendo la cuenta de Windows Live usada

4. Completar el registro

5. Seleccionar las características del calendario que se desea compartir

6. Hacer clic en Avanzadas… para ver las opciones de sincronización del calendario.

7. Al termina la configuración del calendario aparece un mensaje preguntando por invitaciones para el acceso al calendario.

8. La invitación que se genera es como la siguiente.

y el usuario la ve de esta forma

Usando los botones “Suscribirse al calendario” y “Obtener vista previa de este calendario” se puede tener acceso al mismo.

Adicionar días hábiles a una fecha con jscript

function MasDiasHabiles(dt, dias){
    while(dt.getDay() == 0 || dt.getDay() == 6)
        dt.setDate(dt.getDate()+1);
    while (dias-- > 0) {
        dt.setDate(dt.getDate()+1);
        if (dt.getDay() == 6)  {
            dt.setDate(dt.getDate() + 2);
        }
    }
    return dt;
}

var dt;
dt = new Date();
alert(dt);
dt = MasDiasHabiles(dt,2);
alert(dt);

Obtener el rol de un usuario de CRM 3.0 desde el cliente

function getUserId() {
    try
    {
        var command = new RemoteCommand("SystemUser", "WhoAmI", "/MSCRMServices/");
        var oResult = command.Execute();
        if (oResult.Success){
            return oResult.ReturnValue.UserId;
        }
    }
    catch(e){
        alert("Error al obtener el Id del usuario");
    }
    return null;
}

function getUserRoles(userId) {
    try
    {
        var command = new RemoteCommand("UserManager", "GetUserRoles");
        command.SetParameter("userIds", "<guid>" + userId + "</guid>");
        var oResult = command.Execute();
        if (oResult.Success){
            return oResult.ReturnValue;
        }
    }
    catch(e){
        alert("Erorr al obtener los roles del usuario" + userId.toString());
    }
    return null;
}

function userHasRole(userId, roleName){
    result = getUserRoles(userId);
    if (result != null){
        var oXml = new ActiveXObject("Microsoft.XMLDOM");
        oXml.resolveExternals = false;
        oXml.async = false;
        oXml.loadXML(result);
        roleNode = oXml.selectSingleNode("/roles/role[name='" + roleName + "']");
        if (roleNode != null){
            if (roleNode.selectSingleNode("roleid[@checked='true']") != null)
                return true;
        }
    }
    return false;
}

function currentUserHasRole(roleName){
    userId = getUserId();
    return userHasRole(userId, roleName);
}

if(currentUserHasRole('Administración de ventas')){
        crmForm.all.ks_prorroga.Disabled=false;
}
else{
    crmForm.all.ks_prorroga.Disabled=true;
}

Obtener Roles de usuario en CRM desde el servidor

        public BusinessEntityCollection RolesDelUsuario(Guid guidUserID)
        {
            try
            {
                QEH = new QueryExpressionHelper(EntityName.role);
                QEH.Columns.AddAllColumns();
                QEH.LinkEntities.AddLink("roleid", "systemuserroles", "roleid");
                QEH.LinkEntities[0].Criteria.Conditions.AddCondition("systemuserid", ConditionOperator.Equal, new string[] { guidUserID.ToString() });
                BusinessEntityCollection Res = Servicio.RetrieveMultiple(QEH.Query);
                return Res;
            }
            catch (System.Web.Services.Protocols.SoapException e)
            {
                Errores Err = new Errores();
                Err.RegistraError(e, "PO.RolesDelUsuario");
                return null;
            }
            catch (Exception ex)
            {
                Errores Error = new Errores();
                Error.RegistraError(ex,"PO.RolesDelUsuario");
                return null;
            }
        }

Obtener el rol y la lista de roles del usuario de CRM 4.0 desde el cliente

//check if the current user has the 'System Administrator' role alert(UserHasRole("System Administrator"));
function UserHasRole(roleName)
{
 //get Current User Roles, oXml is an object var oXml = GetCurrentUserRoles();
 if(oXml != null)
 {
 //select the node text var roles = oXml.selectNodes("//BusinessEntity/q1:name");
 if(roles != null)
 {
  for( i = 0; i < roles.length; i++)
  {
   if(roles[i].text == roleName)
   {
    //return true if user has this role 
    return true;
   }
  }
 }
}
 //otherwise return false 
return false;
}
function GetCurrentUserRoles()
{
 var xml = "" +
        "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
        GenerateAuthenticationHeader() +
        " <soap:Body>" +
        " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
        " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
        " <q1:EntityName>role</q1:EntityName>" +
        " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
        " <q1:Attributes>" +
        " <q1:Attribute>name</q1:Attribute>" +
        " </q1:Attributes>" +
        " </q1:ColumnSet>" +
        " <q1:Distinct>false</q1:Distinct>" +
        " <q1:LinkEntities>" +
        " <q1:LinkEntity>" +
        " <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +
        " <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +
        " <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +
        " <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +
        " <q1:JoinOperator>Inner</q1:JoinOperator>" +
        " <q1:LinkEntities>" +
        " <q1:LinkEntity>" +
        " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +
        " <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +
        " <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +
        " <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +
        " <q1:JoinOperator>Inner</q1:JoinOperator>" +
        " <q1:LinkCriteria>" +
        " <q1:FilterOperator>And</q1:FilterOperator>" +
        " <q1:Conditions>" +
        " <q1:Condition>" +
        " <q1:AttributeName>systemuserid</q1:AttributeName>" +
        " <q1:Operator>EqualUserId</q1:Operator>" +
        " </q1:Condition>" +
        " </q1:Conditions>" +
        " </q1:LinkCriteria>" +
        " </q1:LinkEntity>" +
        " </q1:LinkEntities>" +
        " </q1:LinkEntity>" +
        " </q1:LinkEntities>" +
        " </query>" +
        " </RetrieveMultiple>" +
        " </soap:Body>" +
        "</soap:Envelope>" +
        "";
 var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
 xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
 xmlHttpRequest.setRequestHeader("SOAPAction"," http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
 xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
 xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
 xmlHttpRequest.send(xml);
 var resultXml = xmlHttpRequest.responseXML;
 return(resultXml);
}

Configuración del Linksys WRE54G con un ruteador 2Wire de Prodigy

 

1. Conectar con el cable de red el WRE54G (RE, en adelante) a la computadora sin ninguna otra conexión

2. Clic derecho en el ícono de la conexión. En las propiedades de la tarjeta de red a la que está conectado el RE.

Seleccionar Protocolo Internet TCP/IP y Propiedades

3. Abrir Explorador de Internet y conectarse a http://192.168.1.240 (Si no responde “resetear” el RE y volver al paso 1).

4. Cambiar EL SSID por el de la red inalámbrica, verificar que se esté usando el canal 9 o 6 se puede ver cual es al correr el “setup” del RE, Clic en Save Settings.

5. Clic en Edit Security Settings

Contraseña: admin sin usuario

6. Escribir la contraseña con la que entran normalmente a la red inalámbrica en Key 1

Clic en “Save Settings”

7. Cerrar Explorer.

8. Desconectar el RE de la computadora.

9. Desconectarlo de la corriente.

10. Colocarlo en el lugar adecuado y conectarlo a la corriente.

11. Probar conexión.

Asignar atributos personalizados de un producto de oportunidad (opportunityproduct) a un producto de cotización (quoteproduct) en Microsoft CRM 3.0

Para crear una asignación de un atributo personalizado entre productos de oportunidad y productos de cotización puede usarse el siguiente método, desconozco si se trata o no de un método soportado pero resulta muy útil.

1. En SQL Server Management Studio. 

Select * from entitymapbase where targetentityname = ‘salesorderdetail’

2. Esta consulta deberá regresar 3 registros para el caso mencionado nos interesa el renglón cuya columna SourceEntityName tenga el valor quotedetail

3. Copiar el valor GUID de la columna EntityMapId para ese renglón.

4. En el URL http://<miservidor>/Tools/SystemCustomization/Relationships/Mappings/mappingList.aspx?mappingId=<EntityMapId> usar el GUID copiado.

5. Agregar los atributos que queremos asignar.

6. Publicar la entidad (en este caso Producto de cotización).