Posts

Showing posts from 2011

Sharepoint 2010 - Email Event Receiver Issues

Image
The Email event receiver is not so simple to create and execute... I experienced some issues for the correct configuration. EmailReceived Method: wrong reference in Handle Email Receiver method created by VS When you create the email event receiver you see the method EmailReceived. In Visual Studio, see properties of event receiver and you see "handle email receiver" = false. If you set to true, VS creates method EmailReceiver with Microsoft.Sharepoint.SPEmailMessage insthead of Microsoft.Sharepoint.Utilities.SPEmailMessage. This cause error in build event receiver. I think is an issue/bug of Sharepoint 2010, but I did not found any documentation in MS. Solution : The event receiver work fine without set "handle" property to true. Leave this setting to false. Email Event Receiver: SPContext.Current is null Solution : use list.ParentWeb, from the list property of method EmailReceived. Email Event Receiver: if you have to process attachment of email If y...

Sharepoint 2010 - Impersonate issue in Office and SP2010 when editing Document?

There's a strange behaviour in SharePoint 2010 with Office and impoersonate users. The Scenario: User A is logged into Windows. User A opens SharePoint 2010 site and then signs in under a different user (User B). The user (now logged in as User B in SharePoint) edits a Word document which is required to be checked out. User B checks out document in SharePoint 2010 But when Word opens, a message is displayed saying 'This document is checked out by User B'. or User B opens Word document, client Word opens and ask for check-out. User checks out document in Word But when user try to save, an error message is displayed and in Sharepoint user see that document is checked out by User A. The Word document should be able to be edited because the user context from SharePoint sent to Word should be as User B not User A. It seems that Word is still opening up as User A and because the document is actually checked out to User B it can't be edited. The answer is ...

Google Voice in lingua italiana prepara la strada per l'Italia?

Questa sera è arrivato l'aggiornamento dell'applicazione Google voice .. L'ho sempre tenuta qui sul mio nexus nella speranza ogni tanto di vedere l'ok al momento della verifica del numero. Niente.. beh in Italia non è ancora attivo il servizio ok. Però stasera arriva l'update e magia.. l'applicazione è tradotta in italiano! Vano ancora il mio tentativo di configurazione : ancora non è possibile verificare il numero. Che sia un timido segnale.che stia per arrivare anche qui questo servizio? Speriamo!! E aspettiamo!

Sharepoint 2010 - Migrate List-based Workflows between Sites and Site Collections

Thank you Gavinmckay, you saved me! From his blog:  http://gavinmckay.wordpress.com/2011/08/29/howto-move-or-migrate-sharepoint-2010-list-based-workflows-between-sites-and-site-collections/ I’ve experienced this issue a lot when trying to migrate workflows between test SharePoint 2010 farms and production farms, in particular with workflows attached to lists. When moving a workflow to another site collection or server farm, the association to the list is broken and the workflow cannot be attached to the list. You also cannot use SharePoint designer to fix this via the standard methods as the unattached workflow cannot be reattached to the list. List-based workflows are tied to three different lists – the “main” source list where the data is held (such as a Forms library or custom list), a task list, and a workflow history list. The latter in particular is tricky, because it is a hidden list and cannot be viewed via the normal interface. The fix for this is to modify the sou...

Sharepoint 2010 - Enable/Disable Ribbon Button with EcmaScript

I show you a detailed example of how to enable and disable a ribbon button according to the current user’s group. The example uses “EnabledScript” attribute of the CommandUIHandler of the ribbon button. Then the EnabledScript is built with EcmaScript to find groups and user info. Lets Start with creating a Ribbon button first. 1. Create a empty project. 2. Deploy it as a Farm solution. 3. Right click on the feature and click “Add feature”. 4. Right click on the project and add a new “Empty Element” item. 5. Next add the below code to add a custom Ribbon button to your document library. <Elements xmlns=”http://schemas.microsoft.com/sharepoint/” > <CustomAction Id=”ButtonForGroupUsersOnly” Location=”CommandUI.Ribbon” RegistrationId=”101″ RegistrationType=”List” Title=”Owners Group Button”> <CommandUIExtension> <CommandUIDefinitions> <CommandUIDefinition Location=”Ribbon.Library.ViewFormat.Controls._children”> <Button Id=”Ribbon.L...

Blogger - Redirect when you change Blog URL

Recently I changed URL of my blog from giorgioguerrieri.blogspot.com to webdevshareetc.blogspot.com. I know that my posts linked in facebook, google+, twitter have the old URL, so I search for a solution, a way to redirect post giorgioguerrieri.blogspot.com/2010/eccccc to webdevshareetc.blogspot.com/2010/eccccc, without 404 or other annoying message of Page Not Found. So, I googled but nothing. I found my solution with this process. NOTE: it works if you have a personal site and it's used not for personal site. I use my site for development, so when you navigate to www.giorgioguerrieri.it your browser redirect to my blog. You have change URL of your blog (giorgioguerrieri to webdevshareetc.blogspot.com) Create a new blog with URL equals to old URL (new blog giorgioguerrieri.blogspot.com) Go to Settings in new Blog and set Redirect to your public domain (I've www.giorgioguerrieri.it). Important! You have to insert URL as "www.yourdomain.com?", yes, with ...

Sharepoint 2010 - Modify Documents Properties with ECMA Script

Finally I found the way to modify document properties with ECMA Script! It's not an hard work for Document Libraries with no mandatory check out. Here the script: function updateDocument(action, docLibId, docId, fieldName, fieldValue) {     var context = new SP.ClientContext.get_current();       var web = context.get_web();       var docLibGuid = new SP.Guid(docLibId);       var docLib = web.get_lists().getById(docLibGuid);       var doc = docLib.getItemById(docId);       doc.set_item(fieldName, fieldValue);         doc.update();       context.executeQueryAsync(Function.createDelegate(this, this.successUpdateDocument), Function.createDelegate(this, this.failed));  } function successUpdateDocument(sender, args) {       //reload page if success       location.reload(true); } But when we set check out mandatory, we ...

SharePoint 2010 WebPart Properties not saving

Image
I lost many time to find the way to save properties of a custom web part in Sharepoint 2010. All my classes, methods, properties are defined correctly, but when I deploy web part and I try to save props, values were not saved and web part load with his default values. Then I search for solution and I found that it is due to disposing the current web (SPContext.Current.Web). I understood that I don't have to dispose SPContext.Current.Web object in my code and neither use using(SPWeb web = SPContext.Current.Web). The solution is to use directly SPWeb web = (new SPSite(SPContext.Current.Site.ID)).openweb(SPContext.Current.Web.ID); to initiate a new web object and then dispose it after using. The Save button finally saved properties values!

Google+: Le mie Attività - Gadget per il tuo sito

Come promesso. Un po' di smanettamento e via con una mia prima applicazione di esempio delle API per Google+. Una cosa interessante della chiamata per le attività di un utente è la possibilità di definire nell'URL la funzione javascript che deve essere chiamata al rientro della risposta JSON. Il nostro json, infatti, non è così immediatamente utilizzabile (e di certo esistono molti più esperti di me, nel settore, ma io l'ho scoperto pian pianino) e ha bisogno di un po' di aiuto, sopratutto quando si tratta di chiamate cross-domain. Bene. Jquery ci aiuta, sì e no: ho usato le librerie JSONP, che ho linkato direttamente da  http://jquery-jsonp.googlecode.com/files/jquery.jsonp-2.1.4.min.js . La chiamata, così, è composta in questo modo: $(document).ready( function () {    $.jsonp({ url: "https://www.googleapis.com/plus/v1/people/100661704413873131754/activities/public?callback=readJSON&key=YOUR_APIKEY" }); }); Nell'URL notiamo il param...

Estrarre immagini da PDF o convertire pagine PDF in immagini in C#

E' stata dura. Molto dura. Una nuova sfida: Estrarre immagini da un PDF o convertire una pagina PDF in una immagine. Con C#. Ho dovuto guardarmi parecchi forum e blog per arrivare ad una soluzione decente, free e con poco sforzo. Partiamo dal primo caso: Estrazione di una immagine da una pagina di un documento PDF. Ho utilizzato iTextSharp, che normalmente usiamo per generare PDF, ma che è stato utile per leggere il file e trovare in esso le immagini. Il metodo qui sotto ritorna lo stream dell'immagine.. perché a me serviva così. Vediamo il codice (dopo aver referenziato la DLL di iTextSharp): using iTextSharp.text; using iTextSharp.text.pdf; static Stream ExtractImagesFromPDF(string sourcePdf) { System.IO.MemoryStream streamImage = new MemoryStream(); // NOTE: This will only get the first image it finds per page. PdfReader pdf = new PdfReader(sourcePdf); RandomAccessFileOrArray raf = new iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf); int numbOfPag...

Getting Started on the Google+ API

Image
E ora sarà dura battaglia a facebook! Google apre le sue prime API per utilizzare la piattaforma Google+. E' cosa dell'ultimissima ora, mi è appena arrivata comunicazione proprio da G! Due i punti di partenza. Un post su  http://googleplusplatform.blogspot.com/ , con descrizione delle prime (ridotte) funzionalità. E il nuovo sito per gli sviluppatori per Google+ Platform:  https://developers.google.com/+/ Ma veniamo a cosa possiamo fare, per adesso, con queste prime API. Traduco, più o meno liberamente, alcuni passi base dal post ufficiale. Let ' S Go Public! Questo rilascio iniziale di API è focalizzato solo sui dati pubblici: consente di leggere le informazioni che le persone hanno condiviso pubblicamente su Google +. Ad esempio, se si desidera ottenere le informazioni del mio profilo, è possibile utilizzare il metodo people.get inviando una richiesta HTTP, con l'id del mio utente: GET https://www.googleapis.com/plus/v1/people/100661704413873131754...

Sharepoint 2010 - Custom Action: visibilità secondo permessi utente

Image
In un mio post ho spiegato come aggiungere bottoni al Ribbon, contestuali sull'item, per disporre di Azioni personalizzate ( Sharepoint 2010 - Aggiungere bottone al Ribbon con Sharepoint Designer 2010 ). Un punto aperto di quel post è come rendere questi bottoni visibili solo a chi ne ha i permessi. Eccomi quindi ad aggiornare il Blog con questa interessante possibilità. L'opzione Rights Mask o Maschera di diritti ci permette di soddisfare questo requisito. I valori disponibili possono essere trovati su MSDN, ma per nostra comodità li scrivo qui sotto. È possibile inserire più valori nel campo Rights Mask separati da punti e virgola. Ed ecco qui i valori permessi List/document perms Mask ViewListItems 1 AddListItems 2 EditListItems 4 DeleteListItems 8 ApproveItems 16 OpenItems 32 ViewVersions 64 DeleteVersions 128 CancelCheckout 256 ManagePersonalViews 512 ManageLists 2,048 ViewFormPages 4,096 Web level perms Open 65,536 ViewPages 131,072 AddAnd...

Applicazioni per Android: Svilupparle con Appsgeyser

Image
Bentornati dalle ferie! Sapevo che comprare un smartphone con Android mi avrebbe fatto pensare che prima o poi, in qualche modo, sarei riuscito a sviluppare un'applicazione! Beh, non è facile devo dire... Ho già provato ad installare l'SDK, per capire che strumenti ci vogliono, ecc... Troppa fatica e troppo tempo da dedicare, in un momento in cui tempo non c'è, o se c'è, quello che manca è la voglia di mettersi davanti al pc, invece che stare all'aria aperta! Così, ho cercato e ho trovato il modo più semplice: www.appsgeyser.com ! Un servizio, semplice e gratuito, che permette di implementare una applicazione per Android online! Detta così, lo capisco, sembra sbalorditivo! Ma quello che succede è presto fatto. L'applicazione in questione fa uso del browser dell'apparecchio, e tramite questo raggiunge widget o pagine web Mobile. Però, installa sul telefonino l'applicazione, con tanto di icona. Senza AD (a meno di non utilizzarla per distri...

Sharepoint 2007 - Exception from HRESULT: 0x8102009B

Per la serie "Messaggi di Errore Parlanti", ecco la spiegazione dell'errore indicato qui sotto: Microsoft.SharePoint.SPException: Exception from HRESULT: 0x8102009B  System.Runtime.InteropServices.COMException (0x8102009B): Exception from HRESULT: 0x8102009B at Microsoft.SharePoint.Library.SPRequestInternalClass.AddWorkflowToListItem(String bstrUrl, String bstrListName, Int32 ….. Bene: si sta tentando di avviare una nuova istanza di un workflow, ma quel workflow è già avviato oppure è in errore. Rimuovere le istanze di workflow, interrompere il flusso attivo e .. riprova sarai più fortunato.

Android SDK - Install su Windows 7 32bit

Image
Oggi ho provato ad installare l'Android SDK sul mio pc Windows7 a 32bit. Il primo messaggio dice "Java SE development Kit (JDK) not found": giusto, non c'è. Seguo le indicazioni, scarico e installo JDK. Riprovo Android SDK e ancora "Java SE development Kit (JDK) not found"... Ho trovato su un forum che il problema si presenta sia con Windows7 32 bit che con Windows XP SP3. La soluzione: Nella schermata del messaggio "JDK not found", clicca su BACK e poi ancora NEXT ed ecco che si può continuare.. Mah...

Microsoft Dynamics CRM 2011 - DeletionStateCode Missing

Image
La nuova versione CRM 2011 porta in sé un certo numero di modifiche, di cui più o meno si è parlato. Una di cui non si è detto quasi niente non è neppure così banale, per chi sviluppa personalizzazioni.   DeletionStateCode In CRM 4.0, esiste la colonna DeletionStateCode, su ogni entità, a livello di database, e che ci dice quando un record è stato eliminato. I suoi valori sono:  - 0 indica il record è in stato attivo nel database,  - 2 il record è stato contrassegnato per la rimozione, quando il Deletion Job verrà eseguito - 1 il record non è utilizzato.   Schedulando il servizio di Deletion, vengono rimossi dalle tabelle tutti i record con DeletionStateCode = 2. Per fortuna o purtroppo, il servizio spesso non parte o dà problemi o lascia qualche record. Quando sviluppiamo personalizzazioni in CRM, bisogna tener conto della colonna DeletionStateCode dei record, ad esempio per escludere dalle query quelli che sono "in cancellazione" e non più validi. Inoltre, la p...

Nexus Contraptions: gioco dedicato al Nexus S

Image
Smanettare con il proprio nuovo Nexus S... Google sembra aver sempre voglia di giocare. Non stupisce quest'altra novità: un gioco dedicato al suo ultimo smartphone. Lo scopo del gioco è costruire un Nexus S utilizzando vari strumenti per spostare nell’imbuto le applicazioni a forma di sfere. Tutti i livelli sono cronometrati e, alla fine del gioco, comparirà il punteggio totale e un bel Nexus S come premio. Il gioco è realizzato il flash ed è disponibile sul sito Nexus e i suoi Marchingegni . Buon divertimento! Anche se preferisco giocare con quello vero ;-)

+1 (plus one) Il nuovo bottone di Google sul tuo Sito

Image
Dopo aver un po' cambiato tutti noi, Google sta cambiando se stesso.. Di recente, ha cambiato aspetto, il tema delle sue pagine e anche il metodo di ricerca... Pure un nuovo Social Network (Google+), giusto per fare un po' di movimento. Ma prima ancora, ha lanciato un nuovo bottone: il +1 ! E non è assurdo pensare che il "plus one" sia venuto a predisporre Google+... anzi. Il +1 è già integrato in molti siti e i risultati della ricerca di Google permettono di dare un senso e condividere quello che abbiamo cercato. E trovato. Ma, come Facebook insegna, quel bottoncino, volete mica lasciarlo solo sui siti Google? Ovviamente, potete andare a vedere come si fa, direttamente da Google . Ma mi piace scrivere due righe su come sia altrettanto semplice del "Like" di Facebook. Anzi, forse è più facile ancora: richiede solo due righe di codice. Una nell'head o nel body e l'altra nel posto in cui si desidera inserire il +1. <script typ...

Google+ è arrivato e... ci sto già dentro!

Image
Dopo un primo tentativo con Google Wave, miseramente fallito, direi, ora Google ci riprova! Ecco presentato in test, a inviti il nuovo Social Network targato Big G Il privilegio di entrarci era fino a poco fa ad esclusiva di pochi eletti, ma ora è libero, o almeno.. un mio car(l)o amico mi ha segnalato il tutto e ora... Già. E ora? E ora si va alla scoperta di un'altra storia. Riusciremo a stare dietro a tutti i nostri social-posti? La cosa più interessante, che mi hanno fatto notare, è questa, probabilmente il futuro possibile del web, a prescindere dalle decine di social network in cui saremo iscritti: <!DOCTYPE html>

Sharepoint 2010 - Aggiungere bottone al Ribbon : aprire nuovo Documento da Template

Image
Ecco una cosa interessante. Aggiungere nuovi bottoni al Ribbon di una lista, in Sharepoint 2010, è abbastanza semplice. Ho già scritto come farlo con ancora più facilità, tramite lo Sharepoint Designer 2010 ( clicca qui ). Ora, vediamo come aggiungere una azione personalizzata al bottone in modo che replichi le funzionalità di bottoni già esistenti. Lo scenario è questo. Siamo in una Document Library. Cliccando sulla lista, viene visualizzato il Ribbon della lista. Nella sezione Documents, a sinistra, abbiamo il bottone New. Se abbiamo più Content Type (e template) per i Documenti, vedremo una tendina con la scelta del nuovo Documento da creare. Se configurato per l'esecuzione sul Client dell'utente, al click su, ad es, New Template1, viene avviato MS Word con il template in oggetto. Ma se volessimo creare un nuovo bottone sul Ribbon che faccia da solo questo? In altre parole: non voglio cliccare su New, per poi selezionare dalla tendina quello che serve. Voglio ...

Sharepoint 2010 - Aggiungere bottone al Ribbon con Sharepoint Designer 2010

Image
Vediamo come aggiungere un bottone personalizzato al Ribbon di una lista o document library, utilizzando solo lo Sharepoint Designer 2010. Apriamo il sito con SPD2010, nelle liste, selezionamo la lista che vogliamo utilizzare. A fondo pagina, vediamo il blocco Azioni Personalizzate. Non clicchiamo su Nuovo, ma facciamo un clic con il mouse all'interno del blocco e dal menu contestuale, scegliamo Azione Personalizzata. Vediamo un menu a discesa con diverse opzioni: La traduzione italiana pessima rende oscura l'interpretazione delle voci... Provo a spiegarle. Menu voci elenco : il bottone è visualizzato nel menu a tendina sull'item Visualizza barra multifunzione modulo : il bottone è visualizzato nella scheda "View properties" Modifica barra multifunzione modulo : il bottone è visualizzato nella scheda "Edit properties" Nuova barra multifunzione modulo : il bottone è visualizzato nella scheda "New item" Visualizza barra multi...

Sharepoint 2007 - Deploy in produzione con Visual Studio 2008

Dopo aver partecipato a corsi di Sharepoint 2010 e visto quanto sia (relativamente ok...) semplice eseguire il Deploy di soluzioni dall'ambiente di test all'ambiente di produzione, mi sono scontrato con la realtà di Sharepoint 2007... Il deploy di una web part custom, implementata con Visual Studio 2008. Lo sviluppo è andato liscio, senza problemi. Il deploy in ambiente di test, ancora più semplice: tasto destro sul progetto, click su Deploy e via. Ora è giunto il momento del deploy in produzione.. Come fare? Diversi forum mi propongono soluzione a detta loro "semplici", con creazione di un progetto CAB per generare un package da copiare in produzione e poi deploy con stsadm. Non è così facile. Almeno, io ho incontrato difficoltà per due motivi: - o riconosce il file come CAB quindi vuole addpackage anziché addsolution - o (se rinominato in .wsp) non vuole addsolution - o mi dice che manca il manifest.xml (pur essendoci) Allora, ho seguito una mia strada. Da Visual S...

LyteBox sulle immagini inserite in Blogger

Image
Ovviamente non l'ho scoperto io né tantomeno me lo sono inventato. Copio e incollo un riassunto delle istruzioni per l'effetto tipo Lightbox per le immagini inserite in questo Blog! Andare su Layout > Modifica HTML e, dopo aver salvato il modello completo, cercate la riga </head>, quindi, immediatamente sopra incollateci il seguente codice (ovviamente potete scaricare i file necessari e metterli dove volete): <!-- EFFETTO LYTEBOX INIZIO --> <link href='https://sites.google.com/site/ideepercomputeredinternet/script-1/lytebox-stile-2.css' media='screen' rel='stylesheet' type='text/css'/> <script src='http://sites.google.com/site/ideepercomputeredinternet/script-menu/lytebox-script.js' type='text/javascript'/> <!-- EFFETTO LYTEBOX FINE --> Salvate il modello e la personalizzazione è completata. Per attivarla bisogna operare sul codice delle foto inserite. Si possono ottenere effetti su u...

Sharepoint 2007 - Incrementare il limite di peso del Site Template

Il limite impostato di default da Sharepoint 2007 per l'operazione "Save as Template" è di 10 Mb. Questo valore può essere cambiato utilizzando il comando stsadm. Posizionarsi nella folder 12 di MOSS2007 (in Drive:\\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\) e avviare il comando seguente: stsadm -o setproperty -propertyname max-template-document-size -propertyvalue 40000000 Nell'esempio, il comando incrementa il limite e 40Mb.

Sharepoint 2010 - Cambiare Lingua al Titolo delle Web Part

Sharepoint 2010 dà la possibilità di implementare la localizzazione dei siti (e dei suoi elementi), grazie alla Multilanguage User Interface. Purtroppo, come ben documentato da MS stessa ( http://technet.microsoft.com/it-it/library/ff805062.aspx#Section7 ), non tutti gli elementi di un sito possono avere al seguito le traduzioni. Una possibilità è quella di utilizzare un controllo client che ci permetta di cambiare lingua al titolo delle web part. Analizzando il codice della pagina prodotta da Sharepoint, ho individuato i tag necessari ad identificare il titolo della web part. Titolo della Web Part La class ms-WPTitle dell'elemento h3 definisce il titolo della web part. Al suo interno, dobbiamo cercare il tag "span" che contiene il titolo. Generalmente è il primo dei due, senza id e, ovviaemente, non vuoto. Bene, sappiamo dove prendere il titolo. Definiamo ora un modo con cui l'utente possa essere autonomo nella gest...