.

SharePoint ja versiooni kommentaari muutmine

14.06.2008  |  Gunnar

SharePoint Ü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.

Version ver = new Version("1.4");
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 class VersionExtender
{
    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.

void SaveComment(string versionString, string comment, Guid guid)
{
    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.

Kommenteeri

sulge
Saada link e-postiga

© DT 2006-2008 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress