SharePoint ja versiooni kommentaari muutmine
14.06.2008 | Gunnar
Ühe töö käigus oli vaja leida võimalus SharePoint 2007 dokumentide versioonide kommentaaride muutmiseks. Ei olnud siin mängus kurja onu Reinu käsi, kes kommentaatoreid puua tahab, vaid pealtnäha täiesti tavaline andmete eksportimise ja importimise protsess.
Lühidalt öeldes on see, mis ma tegin, päris räige häkk. Idee on lihtne - loome ühenduse andmebaasiga, kus SharePoint andmeid hoiab, leiame üles vastava dokumendi versiooni read kahes tabelis ning kirjutame õigele versioonile kommentaari külge.
Kui keegi teab mõnda viisakamat meetodi, siis palun muidugi lahkesti teada anda. Oleksin äärmiselt tänulik.
Andmebaas
| Versioon | Täisarv |
|
0.3 |
3 |
|
1.0 |
512 |
|
1.3 |
515 |
|
2.0 |
1024 |
|
3.5 |
1541 |
Esimese asjana teeme tutvust andmebaasiga. Tabeleid pole seal tõenäoliselt väga palju vaikimisi paigalduse korral ning meid huvitab ainult kaks tabelit - AllDocs ja AllDocVersions. Versioonide väljad on UIVersion ja Version vastavalt. Kommentaarid asuvad mõlemas tabelis väljal CheckinComment.
Kommentaaride muutmise ajal ära redigeeri SharePoint'i keskkonna vahendusel neid dokumente, mille versioonide kommentaare soovid muuta. Vastasel korral võivad andmebaasi päringutest hiljem tehtavad salvestused kirjutada kommentaarid üle.
Versioonide formaat
Järgmine konks on formaat, milles versioone hoitakse. Kui ekraanil näeme versioone ilusasti kujul 1.0, 3.1, 2.1 jne, siis andmebaasist vaatavad meile vastu täisarvud. Valem täisarvu saamiseks on selline.
täisarv = põhiversioon * 512 + alamversioon
See tähendab siis seda, et 1024 on versioon 2.0. 516 on versioon 1.2 jne. Esimesed alamversioonid enne dokumendi esimest versiooni on seega siis täisarvud 1, 2, 3 jne.
Paremal asuv tabel annab mõned näited versioonide teisendamise kohta täisarvudeks.
Versioonide klass
Järgmiseks teeme omal elu lihtsamaks sel teel, et võtame koodis kasutusele Version nimelise klassi, mille leiame nimeruumist System. Paraku on see väga vajalik klass lootusetu õnnetus, sest sellest pärida ei saa. Küll aga saame selle klassi abil versioonid lihtsasti ära tükeldatud.
Console.WriteLine("Major: " + ver.Major.ToString());
Console.WriteLine("Minor: " + ver.Minor.ToString());
Console.WriteLine("String: " + ver.ToString());
Console.ReadLine();
Õnneks pakub C# 3.0 välja laiendusmeetodid ning nende abil saame versioonide klassile pookida näiliselt külge meetodi, mis tagastab meile versiooni Sharepoint'i formaadis. Laiendusmeetod on selline.
{
public static Int32 GetSharePointDocVersion(this Version ver)
{
return ver.Major * 512 + ver.Minor;
}
}
Versiooni kommentaari muutmine
Nüüd oleme teinud ära pisikese eeltöö ja võime asuda kommentaaride muutmise kallale. Pakun siinkohal välja ühe meetodi, mida on suhteliselt lihtne katsetada ja oma soovide järgi kohendada.
{
Version version = new Version(versionString);
Int32 uiVersion = version.GetSharePointDocVersion();
SqlConnection cn = new SqlConnection("SP ConnStr");
SqlCommand cmd;
string cmdTxt;
cn.Open();
cmd = cn.CreateCommand();
cmdTxt = "update alldocs set CheckinComment=@Comment Where ";
cmdTxt+= "UIVersion=@Version and cast(id as varchar(100))=@id";
cmd.CommandText = cmdTxt;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Comment", comment);
cmd.Parameters.AddWithValue("@Version", uiVersion);
cmd.Parameters.AddWithValue("@id", guid.ToString());
cmd.ExecuteNonQuery();
cmd = cn.CreateCommand();
cmdTxt = "update alldocversions set CheckinComment=@Comment ";
cmdTxt+= "Where Version=@Version and ";
cmdTxt+= "cast(id as varchar(100))=@id";
cmd.CommandText = cmdtxt;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Comment", comment);
cmd.Parameters.AddWithValue("@Version", uiVersion);
cmd.Parameters.AddWithValue("@id", guid.ToString());
cmd.ExecuteNonQuery();
cmd.Dispose();
cn.Dispose();
}
Sellega sai see pikk kanne nüüd läbi. Veel kord - kui keegi leiab mingi viisakama lähenemise kui minu häkk, siis poetage siia kommentaariks paar rida.
